常規頁生命週期階段
階段 | 說明 |
---|---|
頁請求 |
頁請求發生在頁生命週期開始之前。用戶請求頁時,ASP.NET 將確定是否需要分析和編譯頁(從而開始頁的生命週期),或者是否可以在不運行頁的情況下發送頁的緩存版本以進行響應。 |
開始 |
在開始階段,將設置頁屬性,如 Request 和 Response。在此階段,頁還將確定請求是回發請求還是新請求,並設置 IsPostBack 屬性。此外,在開始階段期間,還將設置頁的 UICulture 屬性。 |
頁初始化 |
頁初始化期間,可以使用頁中的控件,並將設置每個控件的 UniqueID 屬性。此外,任何主題都將應用於頁。如果當前請求是回發請求,則回發數據尚未加載,並且控件屬性值尚未還原爲視圖狀態中的值。 |
加載 |
加載期間,如果當前請求是回發請求,則將使用從視圖狀態和控件狀態恢復的信息加載控件屬性。 |
驗證 |
|
回發事件處理 |
如果請求是回發請求,則將調用所有事件處理程序。 |
呈現 |
在呈現之前,會針對該頁和所有控件保存視圖狀態。在呈現階段中,頁會針對每個控件調用 Render 方法,它會提供一個文本編寫器,用於將控件的輸出寫入頁的 Response 屬性的 OutputStream 中。 |
卸載 |
完全呈現頁並已將頁發送至客戶端、準備丟棄該頁後,將調用卸載。此時,將卸載頁屬性(如 Response 和 Request)並執行清理。 |
生命週期事件
頁事件 | 典型使用 | ||
---|---|---|---|
使用該事件來執行下列操作:
| |||
在所有控件都已初始化且已應用所有外觀設置後引發。使用該事件來讀取或初始化控件屬性。 | |||
由 Page 對象引發。使用該事件來處理要求先完成所有初始化工作的任務。 | |||
如果需要在 Load 事件之前對頁或控件執行處理,請使用該事件。
在 Page 引發該事件後,它會爲自身和所有控件加載視圖狀態,然後會處理 Request 實例包括的任何回發數據。 | |||
Load |
Page 在 Page 上調用 OnLoad 事件方法,然後以遞歸方式對每個子控件執行相同操作,如此循環往復,直到加載完本頁和所有控件爲止。
使用 OnLoad 事件方法來設置控件中的屬性並建立數據庫連接。 | ||
控件事件 |
| ||
對需要加載頁上的所有其他控件的任務使用該事件。 | |||
在該事件發生前:
頁上的每個控件都會發生 PreRender 事件。使用該事件對頁或其控件的內容進行最後更改。 | |||
在該事件發生前,已針對頁和所有控件保存了 ViewState。將忽略此時對頁或控件進行的任何更改。
使用該事件執行滿足以下條件的任務:要求已經保存了視圖狀態,但未對控件進行任何更改。 | |||
Render |
這不是事件;在處理的這個階段,Page 對象會在每個控件上調用此方法。所有 ASP.NET Web 服務器控件都有一個用於寫出發送給瀏覽器的控件標記的 Render 方法。
如果創建自定義控件,通常要重寫此方法以輸出控件的標記。不過,如果自定義控件只合並標準的 ASP.NET Web 服務器控件,不合並自定義標記,則不需要重寫 Render 方法。有關更多信息,請參見開發自定義 ASP.NET 服務器控件。
用戶控件(.ascx 文件)自動合併呈現,因此不需要在代碼中顯式呈現該控件。 | ||
該事件首先針對每個控件發生,繼而針對該頁發生。在控件中,使用該事件對特定控件執行最後清理,如關閉控件特定數據庫連接。
對於頁自身,使用該事件來執行最後清理工作,如:關閉打開的文件和數據庫連接,或完成日誌記錄或其他請求特定任務。
|
其他的頁生命週期注意事項
添加的控件的追趕事件
數據綁定控件的數據綁定事件
控件事件 | 典型使用 |
---|---|
DataBinding |
該事件在包含控件(或 Page 對象)的 PreRender 事件之前由數據綁定控件引發,會標記控件到數據的綁定過程的起點。
如果需要,使用該事件以手動方式打開數據庫連接。(數據源控件通常不需要如此操作。) |
RowCreated(僅限 GridView)或 ItemCreated(DataList、DetailsView、SiteMapPath、DataGrid、FormView 和 Repeater 控件) |
使用該事件來操作不依賴於數據綁定的內容。例如,在運行時,可以以編程方式向 GridView 控件中的頁眉或頁腳行添加格式。 |
RowDataBound(僅限 GridView)或 ItemDataBound(DataList、SiteMapPath、DataGrid 和 Repeater 控件) |
當該事件發生時,行或項中的數據可用,因此,可以在子數據源控件上格式化數據或設置 FilterExpression 屬性,以便顯示行或項中的相關數據。 |
DataBound |
該事件在數據綁定控件中標記數據綁定操作的結尾。在 GridView 控件中,會針對所有行和任何子控件完成數據綁定。
使用該事件格式化數據綁定內容,或在依賴來自當前控件的內容的值的其他控件中啓動數據綁定。(有關詳細信息,請參見本主題中前面的“添加的控件的追趕事件”。) |
登錄控件事件
控件事件 | 典型使用 |
---|---|
在回發期間,當頁的 LoadComplete 事件發生後就會引發該事件。它標記登錄過程的起點。
對必須在驗證過程開始前發生的任務使用該事件。 | |
該事件在 LoggingIn 事件之後引發。
使用該事件來重寫或增強 Login 控件的默認驗證行爲。 | |
該事件在驗證用戶名和密碼後引發。
使用該事件來重定向到另一個頁或動態設置控件中的文本。如果出現錯誤或驗證失敗,就不會發生該事件。 | |
如果驗證失敗,將引發該事件。
使用該事件來設置控件中的問題解釋文本或將用戶定向到不同的頁。 |