1.首先尝试了使用 Request.UrlReferrer
(1)首先在Load事件中写以下代码
代码如下 | 复制代码 |
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Request.UrlReferrer!=null) { ViewState["UrlReferrer"]=Request.UrlReferrer.ToString(); } } } |
2)在登录事件中写以下代码
代码如下 | 复制代码 |
protected void Signin() { //在这里实现用户及密码验证完成后 /************************** * 此处代码省略...... ***************************/ if (ViewState["UrlReferrer"]!=null) { //转到请求页 Response.Redirect(ViewState["UrlReferrer"].ToString()); } else { //转到默认页 Response.Redirect("Default.aspx"); } } |
表面上应该可以实现了,但是事实并非如此,由于我的基类写的是在PreLoad事件中来判断Session,Cookies等信息,如果不存在则转到登录页面。所以在请求页面的Load事件前就转到了登录页面,这样Request.UrlReferrer的值是为空的。参考了stswordman的博客,他是这样写的:
在使用Request.UrlReferrer时还要注意:
(1).如果上一页面使用document.location方法导航到当前页面,Request.UrlReferrer返回空值
(2).如果有 A,B 两个页面,在浏览器中直接请求A页面,在A页面的中Page_Load事件中导航到 B 页面,则Request.UrlReferrer返回空。因为 在Page_load事件中页面还未初始化,所以无法记录当前页的信息,导航到B页面也就无法获得上一页面的信息
(3).点击刷新按钮不会改变Request.UrlReferrer
这个办法不行,于是我决定采用Request.QueryString来解决该问题。
2.采用Request.QueryString
这个方法的关键在于如何获取请求页面的Url,让后将该页面的URl传到登录页面,在登录成功后转到该Url。
(1)在验证基类(Adminbasepage)中写如下代码
代码如下 | 复制代码 |
protected override void OnInit(EventArgs e) { base.OnInit(e); this.PreLoad += new EventHandler(BaseValidate); } protected void BaseValidate(object sender, EventArgs e) if (Request.Cookies["manager"] != null) else Response.Redirect("Signin.aspx?purl=" + Server.UrlEncode(PermissionUrl)); } |
在登录页面的登录事件最后实现跳转
代码如下 | 复制代码 |
if (Request.QueryString["purl"] == null) { Response.Redirect("Default.aspx"); } else { Response.Redirect(Server.UrlDecode(Request.QueryString["purl"].ToString())); } |