轉(zhuǎn)自 http://blog.163.com/budong_weimin_zh/blog/static/129198524201061995455589/
1、IsPostBack介紹Page.IsPostBack是一個標(biāo)志:當(dāng)前請求是否第一次打開。
調(diào)用方法為:Page.IsPostBack或者IsPostBack或者this.IsPostBack或者this.Page.IsPostBack,它們都等價。 1)當(dāng)通過IE的地址欄等方式打開一個URL時是第一次打開, 當(dāng)通過頁面的提交按鈕或能引起提交的按鈕以POST的方式提交的服務(wù)器時,
頁面就不再是第一次打開了。(每點(diǎn)擊一次按鈕,都是一次加載) 2)IsPostBack只有在第一次打開的時候是false,其它時候都是true 3).Net判斷一個Page是否第一次打開的方法:Request.Form.Count>0 4)每次頁面Load的時候,根據(jù)需要把每次都要加載的代碼放在IsPostBack中,只需要加載一次的代碼放在if(!IsPostBack)中。 5)每次用戶回傳服務(wù)器任何信息的時候,都會引發(fā)isPostBack屬性用來判斷此用戶是
否曾經(jīng)做過登陸或者其他事件 6 if(!IsPostBack) { Response.Write("第一次提交!"); } if(IsPostBack) { Response.Write("按按鈕!"); }2 IsPostBack結(jié)論本人對.Net的源代碼中相關(guān)的處理進(jìn)行的分析得到如下的結(jié)論:結(jié)論① 對于使用Server.Transfer進(jìn)行遷移時遷移到的頁面其IsPostBack=false。結(jié)論② Post方式如果Request中沒有請求值,即Request.Form =null則IsPostBack=false;Get方式如果Request中沒有請求值,即Request.QueryString =null則IsPostBack=false。結(jié)論③ 如果QueryString或Form雖然有請求值,但是QueryString或Form中的Key沒有“__VIEWSTATE”和“__EVENTTARGET”和“__VIEWSTATEFIELDCOUNT”,并且沒有鍵為“null”,值以“__VIEWSTATE”開頭并且也沒有值為“__EVENTTARGET”的鍵值對,則IsPostBack=false。結(jié)論④ 使用Response.Redirect方式向自畫面遷移時,此時IsPostBack=false。結(jié)論⑤ 發(fā)生跨頁提交(CrossPagePostBack),當(dāng)訪問PReviousPage屬性的時候,對于源PageIsPostBack=true。結(jié)論⑥ 發(fā)生跨頁提交(CrossPagePostBack)時目標(biāo)頁面是IsPostBack=false結(jié)論⑦ 使用Server.Execute遷移到的頁面其IsPostBack=false。結(jié)論⑧ 在Page運(yùn)行期間其對應(yīng)的DLL被更新了并且Page的樹結(jié)構(gòu)發(fā)生過變化,這種情況下請求時IsPostBack=false。可以這樣來理解這些結(jié)論:一般情況判斷Request中如果沒有請求值則IsPostBack=false。如果有請求值但是不包括“__VIEWSTATE”等一些特殊的鍵或值,則IsPostBack=false(每次請求后.Net框架會將一些特殊的隱藏域
“__VIEWSTATE”等返回給客戶端)。還有一些特殊的情形是上面的規(guī)則不能正確判斷的需要特殊處理的,這些情形包括Server.Transfer,Response.Redirect,CrossPagePostBack,Server.Execute,發(fā)生了頁面元素變化及重新編譯。
新聞熱點(diǎn)
疑難解答