在asp.net里,控件分服务器端控件和html控件,服务器端控件的执行在服务器端进行,html控件的执行在客户端进行
返回上一页的功能,有两种实现方法:
1、用客户端js脚本:history.go(-1);
2、用服务器端代码:Response.Redirct("页面地址");
如果是返回上一页,我们一般使用第一种方法
有时候,我们要有选择的返回上一页,就是当多个页面同时可以连接到一个页面的时候,如果有一个页面的“返回”是特殊的(修改数据后,直接返回上一页,返回的是修改页面,如果我们要返回到标题列表),我们就不可以直接用第一种方法了
在asp里,我们可以取上一页的地址判断是用哪一种方法,在asp.net里,取上一页的地址很有问题
Request.UrlReferrer.ToString();取上一页的地址
Request.Url.ToString();取当前页面的地址
如果要使用第二种方法,我们要用服务器端控件,服务器端控件的执行要先返回服务器,所以上一页的地址改变了
举例:从页面aaa.aspx转到bbb.aspx,在bbb.aspx里有一个<asp:Button>,点击这个Button后,会出现:
Request.UrlReferrer.ToString()==Request.Url.ToString()
就是我们想要的“上一页”地址已经变了
解决办法:static
我是这样解决的:
在aspx页面设置两个控件,一个是客户端的,一个是服务器端的:
<input id="Button3" type="button" value="返回" onclick="history.go(-1);" style='<% ="visibility:" + backvsb %>;' />
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="返回事件列表" Width="90px" />
在cs页面:
protected static string backurl="";
public string backvsb = "visible";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//处理返回按钮
backurl = Request.UrlReferrer.ToString();
if (backurl.IndexOf("EventEdit.aspx") > 0)
{
backvsb = "hidden";
Button2.Visible = true;
}
else
{
backvsb = "visible";
Button2.Visible = false;
}
}
}
这样,当页面从EventEdit.aspx转过来时,我隐藏客户端按钮,当页面从其他页面转过来时,我隐藏服务器端按钮