欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET返回上一页面的实现代码

程序员文章站 2024-03-07 23:22:09
解决方法: 程序的相关介绍 主界面:未发货订单列表(http://localhost:18888/order/unfilledorderslist.aspx) 子界面:订单...
解决方法:

程序的相关介绍

主界面:未发货订单列表(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沒有。