熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET中Page.Ispostback屬性詳解

2013-11-13 11:51:47  來源: .NET編程 

  現在從對ASPNET頁面的執行順序開始體會一下B/S結構的程序的特點下圖是ASPNET頁面的執行順序說明Page_Init(頁面初始化引發的事件)——>Page_Load(加載頁面時引發的事件)——>Control   Event(服務器控件引發的事件)——>Page_UnLoad(頁面從內存中卸載時引發的事件)
 
  Page_Init和Page_UnLoad不常用但是這裡還是要說明一下Page_Init和Page_Load事件區別在於只有後者才能完全加載控件綁定數據雖然你可以在Page_Init中訪問控件但是其viewstate都不會被加載所以此時控件中只擁有默認值
 
  這裡說到了viewstate我們先來做一個大致的了解——其實在ASPNET中有兩個viewstate一個是控件本身的用來維護控件自己的一些狀態比如說某個空間有變色的功能它的viewstate就維護這個功能這個viewstate是不能被用戶訪問的相信自己寫過控件的朋友都會有這樣的感覺自己寫控件當然也要用自己的一個viewstate來維護這個控件的狀態而另外一個viewstate是用戶使用的這個viewstate和Session幾乎一模一樣必須要先對其進行定義才能使用
 
  每當點擊ASPNET的Web網頁上的ButtonLinkButton或ImageButton等控件時表單就會被發送到服務器上如果某些控件的AutoPostBack屬性被設置為true那麼當該控件的狀態被改變後也會使表單會發送回服務器?(AutoPostBack屬性它只有兩個bool值true/false如果這個屬性被設置成false那麼點擊後就不會立刻將變化傳給服務器處理也就不會有該控件的SelectedIndexChanged事件
 
  每次當表單被發送回服務器就會被重新加載啟動Page_Load事件執行Page_Load事件處理程序中的所有代碼(注意是每次都會執行!)
 
  很顯然把網頁的初始化代碼放在這裡是最合適不過我們經常會希望在每次加載網頁時執行一些代碼如一些控件的數據綁定
 
  當我們希望只有在網頁第一次加載時執行另一些代碼(基本上都是數據的默認綁定)甚至希望一些代碼在除首次加載外的每次加載時執行那麼我們可以利用IsPostBack特性來完成這一功能在網頁第一次加載時該屬性的值是false如果網頁因回送而被重新加載IsPostBack屬性的值就會被設置為true在ASPNET應用程序中如果需要在頁面第一次顯示時執行一些初始化操作必須判斷IsPostBack屬性!
 
  在ASPNET使用PageIsPostback那麼就可以避免往返行程上的額外工作如果處理服務器控件回發通常需要在第一次請求頁時執行代碼該代碼不同於激發事件時用於往返行程的代碼如果檢查?PageIsPostBack?屬性則代碼可按條件執行具體取決於是否有對頁的初始請求或對服務器控件事件的響應這樣做似乎很明顯但實際上可以忽略此項檢查而不更改頁的行為該屬性用的好壞直接關系到你程序運行是否按照你最初的意願也關系到整個頁面的效率因為如果每次都會給控件綁定數據不管你是第一次訪問還是提交了數據以後那麼這個頁面程序的效率可想而知
 
  一個B/S結構的頁面每一次提交它都會重新從頭到尾執行一次而C/S結構的程序就不會這樣這是和C/S結構的程序最大的區別!? 其實得不到控件的數據都是因為這個原因


From:http://tw.wingwit.com/Article/program/net/201311/15372.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.