asp.net執行個體登入後返回登入前的頁面

來源:互聯網
上載者:User

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()));
      }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.