一、IsPostBack介紹
Page.IsPostBack是一個標誌:當前請求是否第一次打開。 調用方法爲:Page.IsPostBack或者IsPostBack或者this.IsPostBack或者this.Page.IsPostBack,它們都等價。
1)當經過IE的地址欄等方式打開一個URL時是第一次打開, 當經過頁面的提交按鈕或能引發提交的按鈕以POST的方式提交的服務器時,頁面就再也不是第一次打開了。(每點擊一次按鈕,都是一次加載)
2)IsPostBack只有在第一次打開的時候是false,其它時候都是true
3).Net判斷一個Page是否第一次打開的方法:Request.Form.Count>0
4)每次頁面Load的時候,根據須要把每次都要加載的代碼放在IsPostBack中,只須要加載一次的代碼放在if(!IsPostBack)中。
5)每次用戶回傳服務器任何信息的時候,都會引起isPostBack屬性用來判斷此用戶是服務器
否曾經作過登錄或者其餘事件
6 if(!IsPostBack)
{
Response.Write("第一次提交!");
}
if(IsPostBack)
{
Response.Write("按按鈕!");
}
2 IsPostBack結論
本人對.Net的源代碼中相關的處理進行的分析獲得以下的結論:
結論① 對於使用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。
結論⑤ 發生跨頁提交(CrossPagePostBack),當訪問PreviousPage屬性的時候,對於源PageIsPostBack=true。結論⑥ 發生跨頁提交(CrossPagePostBack)時目標頁面是IsPostBack=false
結論⑦ 使用Server.Execute遷移到的頁面其IsPostBack=false。
結論⑧ 在Page運行期間其對應的DLL被更新了而且Page的樹結構發生過變化,這種狀況下請求時IsPostBack=false。
能夠這樣來理解這些結論:通常狀況判斷Request中若是沒有請求值則IsPostBack=false。若是有請求值可是不包括「__VIEWSTATE」等一些特殊的鍵或值,則IsPostBack=false(每次請求後.Net框架會將一些特殊的隱藏域框架
「__VIEWSTATE」等返回給客戶端)。還有一些特殊的情形是上面的規則不能正確判斷的須要特殊處理的,這些情形包括Server.Transfer,Response.Redirect,CrossPagePostBack,Server.Execute,發
生了頁面元素變化及從新編譯。ide