close

若依照原先自行設定的網頁移轉邏輯,希望A.aspx網頁經過一些處理後,希望跑到B.aspx網頁去。

有幾種作法:

透過程式端的寫法,可利用Server.Transfer("B.aspx"),直接在server端導向B.aspx去,此方法網址列不會改變。(還是A.aspx)

另一種程式端的寫法是用Response.Redirect("B.aspx"),這種作法是在client端執行(就如同使用javascript來轉址般),網址會改變。(變成B.aspx)

若是透過Button上的設定,可透過PostBackUrl的屬性設定為"~/B.aspx",則觸發按鈕後會轉址到B.aspx去。

 

為了去偵測user是如何到達B網頁(判斷是否為正常程序等),我們可以使用Page的PreviousPage以及其isCrossPagePostBack的屬性來判斷。

首先,在B網頁中先判斷this.PreviousPage是否為null。

測試結果:

使用直接打網址到B.aspx,或Response.Redirect("B.aspx")方式,則為null。

使用Server.Transfer("B.aspx")或Button上設定PostBackUrl,則非null。

 

因此,從後兩種方法,可以再接著偵測下去,看看其this.PreviousPage.isCrossPagePostBack的屬性為true或false。

測試結果:

若是Server.Transfer("B.aspx")方式,則isCrossPagePostBack為false。

而Button上設定PostBackUrl的話,其值為true。

 

因此我們可以厘清,若是使用client端的Response.Redirect("B.aspx"),能夠掌握的資訊最少。

而使用PostBackUrl,則可以掌握到是否透過跨網頁方式到達目的網頁,可做一些判斷的機制。

在B.aspx的Page_Load中可以加入以下程式碼做上述三種模式的判斷:

 

    protected void Page_Load(object sender, EventArgs e)
    {
        if (this.PreviousPage != null)
        {
            if (this.PreviousPage.IsCrossPagePostBack)
            {
                Response.Write("PreviousePage: Cross");
            }
            else
            {
                Response.Write("PreviousePage: No Cross");
            }
        }
        else
        {
            Response.Write("No Previous Page");
        }
    }
arrow
arrow
    全站熱搜

    rexmen 發表在 痞客邦 留言(0) 人氣()