ASP.NET返回上一页面的实现方法
今天用ASP.NET做一个类似淘宝中的订单管理系统,遇到的问题:主界面通过一个超链接跳转到子界面后,试了好长时间还是无法从子界面返回主界面。
解决方法:
程序的相关介绍
主界面:未发货订单列表(http://localhost:18888/Order/UnfilledOrdersList.aspx)
子界面:订单详细信息(http://localhost:18888/Order/ViewOrderDetail.aspx?OrderId= id,其中id的值是在主界面中被选中的那条订单信息的id)
主页面为一个订单的主要信息,GridView中有一个HyperLink控件,通过它可以跳转到“订单详细信息”界面进而查看订单的详细信息。
子界面有一个“返回”Button,通过它跳转回主界面。
最初在返回按钮中的程序为:
#region 返回按钮 protected void btnReturn_Click(object sender, EventArgs e) { string url = Request.QueryString["Url"] == null ? "" : Request.QueryString["Url"].ToString(); Response.Redirect(url); } #endregion
经过调试,url得到的值总为空字符串,即url总为"",所以总是返回不到主界面。
查了资料后,我把程序改为:
//在页面加载事件中所加的代码 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) {/******下面的代码一定要放在判断是否是回发事件中,否则仍得不到效果******/ if (Request.UrlReferrer != null) { ViewState["retu"] = Request.UrlReferrer.ToString(); } } } #region返回按钮protected void btnReturn_Click(object sender, EventArgs e) { string url = ViewState["retu"].ToString() == null ? "" : ViewState["retu"].ToString(); Response.Redirect(url); }
修改后的代码,经调试,url = http://localhost:18888/Order/UnfilledOrdersList.aspx,即主界面的地址,因此能正确返回到主界面。
程序解释:用户通过客户端浏览器请求页面,页面第一次运行,语句"ViewState["retu"] =Request.UrlReferrer.ToString();”获取了该请求的上一个页面的URL。之所以将该语句放在"if (!IsPostBack){}"语句快中,是因为当用户输入信息、从可选项中进行选择或单击按钮后,页面可能再次被发送到Web服务器,在ASP.NET中被称为“回发”。更确地的说,页面发送会其自身。因此语句"ViewState["retu"] =Request.UrlReferrer.ToString();”仅需在首次请求页面时执行,而不是每次回发时都执行,这时用Page对象的IsPostBack属性来避免对往返行程执行不必要的处理。
在"if (!IsPostBack){}"处下断点调试时可以清楚得看到这一过程。
插曲:ASP.NET中LinkButton和HyperLink的区别
因为存在主界面向子界面跳转的问题,需要链接,LinkButton和HyperLink都可以实现,查了些资料,最后我选择了HyperLink,因为只是简单的跳转无需进行服务器端处理。在此介绍一下LinkButton和HyperLink的区别:
1)LinkButton支持回发,在服务器端处理页面跳转功能,将用户导航到目标URL。因此可以在链接到新页面前做一些处理,入检验输入,组合成新的URL等。 HyperLink不会回发到服务端,不能进行服务器端的处理。
2) LinkButton控件实现页面跳转是在Click事件中使用Response.Redirect等方法实现的。HyperLink只需设置NavigateUrl就可以实现页面跳转,
用法上最大的区別是 LinkButton有Click事件﹐而HyperLink沒有。
【转载自】:http://www.cnblogs.com/xiaoyudz/archive/2011/04/02/2003921.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 7 个最近很火的开源项目「GitHub 热点速览」
· DeepSeekV3:写代码很强了
· 记一次 .NET某固高运动卡测试 卡慢分析
· Visual Studio 2022 v17.13新版发布:强化稳定性和安全,助力 .NET 开发提
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题