1. 程式人生 > >Page_load事件 Page.IsPostBack屬性

Page_load事件 Page.IsPostBack屬性

原博地址:http://blog.csdn.net/fjclc2008/article/details/6998046

Page_Load,即頁面載入要執行的事件; 
Page_Load的執行分為兩種情況; 
1.Page_Load事件的執行是在第一次載入頁面時發生(即為了響應客戶的請求); 
2.Page_Load事件的執行是在把該頁面回發到伺服器時發生; 
ASP.NET處理重新頁面的時候都要重新執行Page_Load; 
即重建Page類,而Page_Load是重建頁面第一個要執行的事件; 
所以無論何種情況都會執行Page_Load,這時就有必要判斷一下伺服器處理Page_Load事件時是在何種情況發生; 
而Page.IsPostBack正好解決了這個問題; 
當是第一種情況的時候(為了響應客戶的請求)Page.IsPostBack返回false; 
當是第二種情況的時候(把該頁面回發到伺服器給伺服器處理時)Page.IsPostBack返回True; 
所以正確應用好Page.IsPostBack能大大的提高應用程式的效能;

Page_Load事件
Page_Load事件是ASP .NET識別的許多事件中的一個。Page_Load事件在一個頁面載入時被觸發,而且ASP .NET將自動呼叫Page_Load子程式,並在內部執行這段程式碼:

<scriptrunat="server">
Sub Page_Load
lbl1.Text="The date and time is " & now()
End Sub
</script>
<html>
<body>
<form runat="server">
<h3><asp:label id="lbl1" runat="server"/></h3>
</form>
</body>
</html>

注意:Page_Load事件不包含物件引用或是事件引數!

--------------------------------------------------------------------------------


Page.IsPostBack屬性
Page_Load子程式在每次頁面載入的時候都會執行。如果你只想在第一次載入此頁面的時候執行Page_Load中的程式碼,你可以使用Page.IsPostBack屬性。如果Page.IsPostBack屬性為false,頁面是第一次被載入,如果為true,則頁面是被“投遞”(post)回伺服器的(例如從一個表單中的按鈕點選):

<scriptrunat="server">
Sub Page_Load
if Not Page.IsPostBack then
lbl1.Text="The date and time is " & now()
end if
End Sub
Sub submit(s As Object, e As EventArgs)
lbl2.Text="Hello World!"
End Sub
</script>
<html>
<body>
<form runat="server">
<h3><asp:label id="lbl1" runat="server"/></h3>
<h3><asp:label id="lbl2" runat="server"/></h3>
<asp:button text="Submit"runat="server" />
</form>
</body>
</html>

上面的例子中,只會在第一次載入此頁面的時候寫出“The date and time is....”的訊息。當用戶點選Submit按鈕時,submit 子程式會對第二個label寫出“Hello World!”,但是第一個label中的日期和時間則不會改變。
--------------------------------------------------------------------------------


每當點選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結構的程式最大的區別!其實,得不到控制元件的資料,都是因為這個原因。

--------------------------------------------------------------------------------

this.IsPostBack表示是不是回發動作.所謂的回發就是在頁面載入以後,在本頁有提交伺服器的動作.this.IsPostBack    ==   true    表示是回發.