1. 程式人生 > >ASP.NET中防止頁面多次載入的IsPostBack屬性

ASP.NET中防止頁面多次載入的IsPostBack屬性

    查查msdn,上邊有IsPostBack的定義:獲取一個值,該值指示該頁是否正為響應客戶端回發而載入,或者它是否正被首次載入和訪問。如果是為響應客戶端回發而載入該頁,則為 true;否則為 false

    首先,有個問題,web頁面是如何載入的,客戶端瀏覽器伺服器端傳送請求,伺服器端將請求傳送到客戶端,伺服器端將釋放客戶端的請求。

第二個問題,為什麼要防止頁面多次載入,根據上述的載入過程我們知道,當點選頁面的提交按鈕後,瀏覽器會重新從伺服器載入資料,原來的資料就無效,所以我們只需要用isPostBack的true值即頁面第一次載入,客戶端的的隱藏控制元件viewstate將會儲存客戶端的資料,即不需要重新載入。

例如一個簡單的登陸程式碼如下:

    protected void Page_Load(object sender, EventArgs e)
        {
           
            this.txtUserName.Text = "";
            this.txtUserPwd.Text = "";
        
            this.btnExit .Attributes .Add("onclick","window.close();");
        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
            if (this.txtUserName.Text == "a" && this.txtUserPwd.Text == "a")
            {
                this.lblMessage.Text = "登入成功";
            }
            else { 
                this .lblMessage .Text ="登入失敗";
            }

        }
顯示的介面如下:即第一次輸入錯誤的使用者名稱和密碼時會提示登陸失敗。

                  

當我重新輸入正確的使用者名稱和密碼時:頁面還是會提交失敗。

                                            

原因在於,點選登入後系統沒有重新作出迴應。

解決方案:將上述程式碼改為:

 protected void Page_Load(object sender, EventArgs e)
        {
           if(!Page.IsPostBack ){
            this.txtUserName.Text = "";
            this.txtUserPwd.Text = "";
            }
            this.btnExit .Attributes .Add("onclick","window.close();");
        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
            if (this.txtUserName.Text == "a" && this.txtUserPwd.Text == "a")
            {
                this.lblMessage.Text = "登入成功";
            }
            else { 
                this .lblMessage .Text ="登入失敗";
            }

        }
更改後的介面顯示

                                                                         

    整理了現階段能看懂的幾種網上總結:

結論①    對於使用Server.Transfer進行遷移時遷移到的頁面其IsPostBack=false。

結論②    Post方式如果Request中沒有請求值,即Request.Form =null則IsPostBack=false;Get方式如果Request中沒有請求值,即Request.QueryString =null則IsPostBack=false。

結論③    如果QueryString或Form雖然有請求值,但是QueryString或Form中的

Key“__VIEWSTATE”和“__EVENTTARGET”和“__VIEWSTATEFIELDCOUNT”,並且沒有鍵為“null”,值以“__VIEWSTATE”開頭並且也沒有值為“__EVENTTARGET”的鍵值對,則IsPostBack=false。

結論④    使用Response.Redirect方式向自畫面遷移時,此時IsPostBack=false。

       剛開始接觸asp.net問題百出呀真是!此部落格僅供初學者理解。如有錯誤還請指正。