天天看點

ASP.NET 2.0 頁(Page)生命周期概述正常頁生命周期階段生命周期事件其他的頁生命周期注意事項資料綁定控件的資料綁定事件登入控件事件

<a href="http://msdn2.microsoft.com/zh-cn/library/ms178472(VS.80).aspx">引用MSDNASP.NET 頁生命周期概述</a>

ASP.NET

頁運作時,此頁将經曆一個生命周期,在生命周期中将執行一系列處理步驟。這些步驟包括初始化、執行個體化控件、還原和維護狀态、運作事件處理程式代碼以及進行

呈現。了解頁生命周期非常重要,因為這樣做您就能在生命周期的合适階段編寫代碼,以達到預期效果。此外,如果您要開發自定義控件,就必須熟悉頁生命周期,

以便正确進行控件初始化,使用視圖狀态資料填充控件屬性以及運作任何控件行為代碼。(控件的生命周期基于頁的生命周期,但是頁引發的控件事件比單獨的

ASP.NET 頁中可用的事件多。)

階段 說明

頁請求

頁請求發生在頁生命周期開始之前。使用者請求頁時,ASP.NET 将确定是否需要分析和編譯頁(進而開始頁的生命周期),或者是否可以在不運作頁的情況下發送頁的緩存版本以進行響應。

開始

頁初始化

加載

加載期間,如果目前請求是回發請求,則将使用從視圖狀态和控件狀态恢複的資訊加載控件屬性。

驗證

回發事件處理

如果請求是回發請求,則将調用所有事件處理程式。

呈現

解除安裝

完全呈現頁并已将頁發送至用戶端、準備丢棄該頁後,将調用解除安裝。此時,将解除安裝頁屬性(如 Response 和 Request)并執行清理。

在頁生命周期的每個階段中,頁将引發可運作您自己的代碼進行處理的事件。對于控件事件,通過以聲明方式使用屬性(如 onclick)或以使用代碼的方式,均可将事件處理程式綁定到事件。

表列出了最常用的頁生命周期事件。除了列出的事件外還有其他事件;不過,大多數頁處理方案不使用這些事件。而是主要由 ASP.NET

網頁上的伺服器控件使用,以初始化和呈現它們本身。如果要編寫自己的 ASP.NET

頁事件 典型使用

<a href="http://msdn2.microsoft.com/zh-cn/library/7x9azc75%28VS.80%29.aspx">PreInit</a>

使用該事件來執行下列操作:

檢查 IsPostBack 屬性來确定是不是第一次處理該頁。

建立或重新建立動态控件。

動态設定主要頁。

讀取或設定配置檔案屬性值。

ASP.NET 2.0 頁(Page)生命周期概述正常頁生命周期階段生命周期事件其他的頁生命周期注意事項資料綁定控件的資料綁定事件登入控件事件

注意

如果請求是回發請求,則控件的值尚未從視圖狀态還原。如果在此階段設定控件屬性,則其值可能會在下一事件中被重寫。

<a href="http://msdn2.microsoft.com/zh-cn/library/ddx12zse%28VS.80%29.aspx">Init</a>

在所有控件都已初始化且已應用所有外觀設定後引發。使用該事件來讀取或初始化控件屬性。

<a href="http://msdn2.microsoft.com/zh-cn/library/3wf2z4k4%28VS.80%29.aspx">InitComplete</a>

<a href="http://msdn2.microsoft.com/zh-cn/library/3s4f1wwa%28VS.80%29.aspx">PreLoad</a>

在 Page 引發該事件後,它會為自身和所有控件加載視圖狀态,然後會處理 Request 執行個體包括的任何回發資料。

Load

使用 OnLoad 事件方法來設定控件中的屬性并建立資料庫連接配接。

控件事件

ASP.NET 2.0 頁(Page)生命周期概述正常頁生命周期階段生命周期事件其他的頁生命周期注意事項資料綁定控件的資料綁定事件登入控件事件

<a href="http://msdn2.microsoft.com/zh-cn/library/bs9d1zcy%28VS.80%29.aspx">LoadComplete</a>

對需要加載頁上的所有其他控件的任務使用該事件。

<a href="http://msdn2.microsoft.com/zh-cn/library/768a7bzf%28VS.80%29.aspx">PreRender</a>

在該事件發生前:

頁上的每個控件都會發生 PreRender 事件。使用該事件對頁或其控件的内容進行最後更改。

<a href="http://msdn2.microsoft.com/zh-cn/library/9tc8ys0a%28VS.80%29.aspx">SaveStateComplete</a>

使用該事件執行滿足以下條件的任務:要求已經儲存了視圖狀态,但未對控件進行任何更改。

Render

這不是事件;在處理的這個階段,Page 對象會在每個控件上調用此方法。所有 ASP.NET Web 伺服器控件都有一個用于寫出發送給浏覽器的控件标記的 Render 方法。

使用者控件(.ascx 檔案)自動合并呈現,是以不需要在代碼中顯式呈現該控件。

<a href="http://msdn2.microsoft.com/zh-cn/library/fxf48ycz%28VS.80%29.aspx">Unload</a>

該事件首先針對每個控件發生,繼而針對該頁發生。在控件中,使用該事件對特定控件執行最後清理,如關閉控件特定資料庫連接配接。

對于頁自身,使用該事件來執行最後清理工作,如:關閉打開的檔案和資料庫連接配接,或完成日志記錄或其他請求特定任務。

ASP.NET 2.0 頁(Page)生命周期概述正常頁生命周期階段生命周期事件其他的頁生命周期注意事項資料綁定控件的資料綁定事件登入控件事件

在解除安裝階段,頁及其控件已被呈現,是以無法對響應流做進一步更改。如果嘗試調用方法(如 Response.Write 方法),則該頁将引發異常。

各個 ASP.NET 伺服器控件都有自己的生命周期,該生命周期與頁生命周期類似。例如,控件的 Init 和 Load 事件在相應的頁事件期間發生。

雖然 Init 和 Load 都在每個控件上以遞歸方式發生,但它們的發生順序相反。每個子控件的 Init 事件(還有 Unload 事件)在為其容器引發相應的事件之前發生(由下到上)。但是,容器的 Load 事件是在其子控件的 Load 事件之前發生(由上到下)。

一般來說,除非存在嵌套資料綁定控件,否則,您不必擔心這種情況。如果子控件已執行資料綁定,但其容器控件尚未執行資料綁定,則子控件中的資料與其容器控件中的資料可能不同步。如果子控件中的資料根據容器控件中的資料綁定值執行了處理,這種情況則尤其顯著。

若要避免此種情況,需要将 ListBox 控件的資料源控件與 ListBox 控件自身放在同一模闆項中,并且不要以聲明方式設定 ListBox 的資料綁定屬性。而應在 RowDataBound 事件期間在運作時以程式設計方式設定它們,這樣,到 CompanyID 資訊可用時 ListBox 控件才會綁定到其資料。

<a></a>

控件事件 典型使用

DataBinding

該事件在包含控件(或 Page 對象)的 PreRender 事件之前由資料綁定控件引發,會标記控件到資料的綁定過程的起點。

如果需要,使用該事件以手動方式打開資料庫連接配接。(資料源控件通常不需要如此操作。)

使用該事件來操作不依賴于資料綁定的内容。例如,在運作時,可以以程式設計方式向 GridView 控件中的頁眉或頁腳行添加格式。

DataBound

該事件在資料綁定控件中标記資料綁定操作的結尾。在 GridView 控件中,會針對所有行和任何子控件完成資料綁定。

使用該事件格式化資料綁定内容,或在依賴來自目前控件的内容的值的其他控件中啟動資料綁定。(有關詳細資訊,請參見本主題中前面的“添加的控件的追趕事件”。)

<a href="http://msdn2.microsoft.com/zh-cn/library/2st88fky%28VS.80%29.aspx">LoggingIn</a>

在回發期間,當頁的 LoadComplete 事件發生後就會引發該事件。它标記登入過程的起點。

對必須在驗證過程開始前發生的任務使用該事件。

<a href="http://msdn2.microsoft.com/zh-cn/library/2cb3cyf1%28VS.80%29.aspx">Authenticate</a>

該事件在 LoggingIn 事件之後引發。

使用該事件來重寫或增強 Login 控件的預設驗證行為。

<a href="http://msdn2.microsoft.com/zh-cn/library/04tya5te%28VS.80%29.aspx">LoggedIn</a>

該事件在驗證使用者名和密碼後引發。

使用該事件來重定向到另一個頁或動态設定控件中的文本。如果出現錯誤或驗證失敗,就不會發生該事件。

<a href="http://msdn2.microsoft.com/zh-cn/library/h75e0hw1%28VS.80%29.aspx">LoginError</a>

如果驗證失敗,将引發該事件。

使用該事件來設定控件中的問題解釋文本或将使用者定向到不同的頁。

繼續閱讀