ASP.NET中IsPostBack詳解
1、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,發
生了頁面元素變化及重新編譯。
相關文章
- Asp.Net Core 中的HTTP協議詳解ASP.NETHTTP協議
- Asp.net web.config customErrors設定詳解ASP.NETWebError
- 【詳解】以 ASP.NET Core 為例的CI/CDASP.NET
- python中dict詳解Python
- JavaScript中的this詳解JavaScript
- linux中iptables詳解Linux
- Webpack中publicPath詳解Web
- Redis 中 Bitmap 詳解Redis
- Vue中data詳解Vue
- java中CopyOnWriteArrayList詳解Java
- Python中字典使用詳解Python
- Netty中的ChannelHander詳解Netty
- Netty中的ByteBuf詳解Netty
- Linux中awk命令詳解Linux
- JavaScript中 Map 物件詳解JavaScript物件
- 詳解 Spark 中的 BucketingSpark
- Web容器中DefaultServlet詳解WebServlet
- Java中的ThreadLocal詳解Javathread
- Linux中DD命令詳解Linux
- vue中的插槽詳解Vue
- Python中的列表詳解Python
- maven中profiles使用詳解Maven
- 詳解Python中的程式Python
- Java中「Future」介面詳解Java
- Erlang中的Record詳解
- Python中的Super詳解Python
- Pandas中resample方法詳解
- 詳解Vue中的插槽Vue
- Storm中Trident框架詳解ORMIDE框架
- python中list切片詳解Python
- Hive中的UDF詳解Hive
- asp.net core3.1 實戰開發(中介軟體的詳解)ASP.NET
- 解決ASP.NET中的各種亂碼問題ASP.NET
- (精華)2020年9月17日 ASP.NET Core 中介軟體詳解ASP.NET
- ASP.NET Core託管執行Quartz.NET作業排程詳解ASP.NETquartz
- JS中Object的API詳解JSObjectAPI
- Oracle中job的使用詳解Oracle
- 詳解 Java 中的物件克隆Java物件
- iOS中的Reference Counting詳解iOS