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) { // To do someting your want } else { string PermissionUrl = VirtualPathUtility.ToAppRelative(Request.Url.AbsolutePath);//關鍵 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())); } |