ASP.NET的Page.IsPostBack 屬性詳細說明(轉)
現在從對ASP.NET頁面的執行順序開始,體會一下B/S結構的程式的特點,下圖是ASP.NET頁面的執行順序說明:
Page_Init(頁面初始化引發的事件)——>Page_Load(載入頁面時引發的事件)——>Control Event(伺服器控制元件引發的事件)——>Page_UnLoad(頁面從記憶體中解除安裝時引發的事件)
Page_Init和Page_UnLoad不常用,但是這裡還是要說明一下。Page_Init和Page_Load事件區別在於,只有後者才能完全載入控制元件,繫結資料,雖然你可以在Page_Init中訪問控制元件,但是其viewstate都不會被載入,所以此時控制元件中只擁有預設值。
這裡說到了viewstate,我們先來做一個大致的瞭解——其實在ASP.NET中有兩個viewstate。一個是控制元件本身的,用來維護控制元件自己的一些狀態,比如說某個空間有變色的功能,它的viewstate就維護這個功能,這個viewstate是不能被使用者訪問的。相信自己寫過控制元件的朋友都會有這樣的感覺,自己寫控制元件當然也要用自己的一個viewstate來維護這個控制元件的狀態;而另外一個viewstate,是使用者使用的,這個viewstate和Session幾乎一模一樣,必須要先對其進行定義,才能使用。
每當點選ASP.NET的Web網頁上的Button、LinkButton或ImageButton等控制元件時,表單就會被髮送到伺服器上。如果某些控制元件的AutoPostBack屬性被設定為true,那麼當該控制元件的狀態被改變後,也會使表單會傳送回伺服器。?(AutoPostBack屬性,它只有兩個bool值,true/false。如果這個屬性被設定成false,那麼點選後就不會立刻將變化傳給伺服器處理,也就不會有該控制元件的SelectedIndexChanged事件。)
每次當表單被髮送回伺服器,就會被重新載入,啟動Page_Load事件,執行Page_Load事件處理程式中的所有程式碼(注意,是每次都會執行!)。
很顯然把網頁的初始化程式碼放在這裡是最合適不過。我們經常會希望在每次載入網頁時執行一些程式碼,如一些控制元件的資料繫結。
當我們希望只有在網頁第一次載入時執行另一些程式碼(基本上都是資料的預設繫結),甚至希望一些程式碼在除首次載入外的每次載入時執行。那麼我們可以利用IsPostBack特性來完成這一功能。在網頁第一次載入時,該屬性的值是false。如果網頁因回送而被重新載入,IsPostBack屬性的值就會被設定為true。
Page_Init(頁面初始化引發的事件)——>Page_Load(載入頁面時引發的事件)——>Control Event(伺服器控制元件引發的事件)——>Page_UnLoad(頁面從記憶體中解除安裝時引發的事件)
Page_Init和Page_UnLoad不常用,但是這裡還是要說明一下。Page_Init和Page_Load事件區別在於,只有後者才能完全載入控制元件,繫結資料,雖然你可以在Page_Init中訪問控制元件,但是其viewstate都不會被載入,所以此時控制元件中只擁有預設值。
這裡說到了viewstate,我們先來做一個大致的瞭解——其實在ASP.NET中有兩個viewstate。一個是控制元件本身的,用來維護控制元件自己的一些狀態,比如說某個空間有變色的功能,它的viewstate就維護這個功能,這個viewstate是不能被使用者訪問的。相信自己寫過控制元件的朋友都會有這樣的感覺,自己寫控制元件當然也要用自己的一個viewstate來維護這個控制元件的狀態;而另外一個viewstate,是使用者使用的,這個viewstate和Session幾乎一模一樣,必須要先對其進行定義,才能使用。
每當點選ASP.NET的Web網頁上的Button、LinkButton或ImageButton等控制元件時,表單就會被髮送到伺服器上。如果某些控制元件的AutoPostBack屬性被設定為true,那麼當該控制元件的狀態被改變後,也會使表單會傳送回伺服器。?(AutoPostBack屬性,它只有兩個bool值,true/false。如果這個屬性被設定成false,那麼點選後就不會立刻將變化傳給伺服器處理,也就不會有該控制元件的SelectedIndexChanged事件。)
每次當表單被髮送回伺服器,就會被重新載入,啟動Page_Load事件,執行Page_Load事件處理程式中的所有程式碼(注意,是每次都會執行!)。
很顯然把網頁的初始化程式碼放在這裡是最合適不過。我們經常會希望在每次載入網頁時執行一些程式碼,如一些控制元件的資料繫結。
當我們希望只有在網頁第一次載入時執行另一些程式碼(基本上都是資料的預設繫結),甚至希望一些程式碼在除首次載入外的每次載入時執行。那麼我們可以利用IsPostBack特性來完成這一功能。在網頁第一次載入時,該屬性的值是false。如果網頁因回送而被重新載入,IsPostBack屬性的值就會被設定為true。
在ASP.NET應用程式中,如果需要在頁面第一次顯示時執行一些初始化操作,必須判斷IsPostBack屬性!
在ASP.NET使用Page.IsPostback,那麼就可以避免往返行程上的額外工作:如果處理伺服器控制元件回發,通常需要在第一次請求頁時執行程式碼,該程式碼不同於激發事件時用於往返行程的程式碼。如果檢查?Page.IsPostBack?屬性,則程式碼可按條件執行,具體取決於是否有對頁的初始請求或對伺服器控制元件事件的響應。這樣做似乎很明顯,但實際上可以忽略此項檢查而不更改頁的行為。該屬性用的好壞,直接關係到你程式執行是否按照你最初的意願,也關係到整個頁面的效率。因為,如果每次都會給控制元件繫結資料,不管你是第一次訪問,還是提交了資料以後,那麼這個頁面程式的效率可想而知。
一個B/S結構的頁面每一次提交,它都會重新從頭到尾執行一次。而C/S結構的程式就不會這樣,這是和C/S結構的程式最大的區別!? 其實,得不到控制元件的資料,都是因為這個原因。
轉自:http://www.donews.net/shanyou/archive/2004/04.aspx
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/219982/viewspace-504247/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Emacs詳細使用說明(轉)Mac
- 獲取淘寶商品詳情api、介面獲取寶貝詳情、產品詳細屬性示例說明API
- Oracle RAC中Srvctl命令詳細說明(轉)Oracle
- mysql processlist詳細說明MySql
- session的詳細說明和用法Session
- nginx 詳解 – 詳細配置說明Nginx
- nginx 詳解 - 詳細配置說明Nginx
- 獲取拼多多商品詳情api、介面獲取寶貝詳情、產品詳細屬性Java示例說明APIJava
- 思科路由器安全性與可靠性詳細說明路由器
- mysqldump引數詳細說明MySql
- mysql replace into用法詳細說明MySql
- redis info命令詳細說明Redis
- memset函式詳細說明函式
- winscp操作說明,winscp操作說明的詳細解讀
- 細說軟體質量屬性
- Flask-Limit使用詳細說明FlaskMIT
- Linux sed命令詳細說明Linux
- VNC安裝配置詳細說明VNC
- Nginx配置檔案詳細說明Nginx
- CocoaPods | iOS詳細使用說明iOS
- 總帳介面表詳細說明
- Vue元件中prop屬性使用說明Vue元件
- ECSide標籤屬性說明之IDE
- 寬頻路由器的詳細說明路由器
- MySQL mysqldump命令的引數詳細說明MySql
- 流量控制工具TC詳細說明
- sql server系統表詳細說明SQLServer
- mysql uninstall plugins 詳細說明MySqlPlugin
- jpa 方法 命名規則 詳細說明
- Oracle 資料檔案 reuse 屬性 說明Oracle
- R語言-Knitr包的詳細使用說明R語言
- css文字屬性詳細總結CSS
- css列表屬性詳細總結CSS
- asp.net連線資料庫(SQL Server 2005 Express)詳細說明ASP.NET資料庫SQLServerExpress
- php中的var_dump()方法的詳細說明PHP
- ASP.NET中的DataGrid的屬性 (轉)ASP.NET
- JQuery Datatables Columns API 引數詳細說明jQueryAPI
- sql server系統表詳細說明(zt)SQLServer