ASP.NET生命周期如何指定?如下說明:
ASP.NET的生命周期可以分為兩組:
應(yīng)用程序生命周期有以下幾個階段:
ApplicationManager類的一個對象被創(chuàng)建。HostingEnvironment類的一個對象來提供有關(guān)資源的信息。Response)對象被創(chuàng)建。應(yīng)用程序?qū)ο?,?code>HttpContext,HttpRequest和HttpResponse被創(chuàng)建和初始化。HttpApplication對象的一個實例被創(chuàng)建并分配給請求。HttpApplication類處理,這個類處理請求的不同事件。當(dāng)一個頁面被請求時,它被加載到服務(wù)器內(nèi)存中,進(jìn)行處理并發(fā)送到瀏覽器。 然后它從內(nèi)存中卸載。在這些步驟的每個步驟中,都有可用的方法和事件,這些方法和事件可以根據(jù)應(yīng)用程序的需要進(jìn)行覆蓋。換句話說,您可以編寫自己的代碼來覆蓋默認(rèn)代碼。
Page類創(chuàng)建頁面上所有控件的分層樹。頁面上的所有組件(指令除外)都是此控件樹的一部分??梢酝ㄟ^將trace =“true”添加到頁面指令來查看控件樹。我們將涵蓋頁面指令,并在“指令”和“事件處理”下的跟蹤。
頁面生命周期階段是:
了解頁面循環(huán)有助于編寫代碼,使頁面生命周期的任何階段都能發(fā)生一些特定的事情。 它還有助于編寫自定義控件并在正確的時間初始化它們,使用視圖狀態(tài)數(shù)據(jù)填充它們的屬性并運行控制行為代碼。
以下是ASP.NET頁面的不同階段:
| 編號 | 階段 | 描述/說明 |
|---|---|---|
| 1 | 頁面請求 | 當(dāng)ASP.NET獲得一個頁面請求時,它決定是否解析和編譯該頁面,或者會使用一個緩存的頁面版本。相應(yīng)地發(fā)送響應(yīng)。 |
| 2 | 開始頁面生命周期 | 在這個階段,Request和Response對象被設(shè)置。如果請求是舊請求或回發(fā),則頁面的IsPostBack屬性設(shè)置為true。頁面的UICulture屬性也被設(shè)置。 |
| 3 | 頁面初始化 | 在此階段,通過設(shè)置UniqueID屬性并應(yīng)用主題,頁面上的控件被分配唯一ID。 對于新的請求,加載回發(fā)數(shù)據(jù)并將控件屬性恢復(fù)為視圖狀態(tài)值。 |
| 4 | 頁面加載 | 在此階段,使用視圖狀態(tài)和控件狀態(tài)值設(shè)置控件屬性。 |
| 5 | 驗證 | 驗證控件的驗證方法被調(diào)用,并在成功執(zhí)行時,頁面的IsValid屬性設(shè)置為true。 |
| 6 | 回發(fā)事件處理 | 如果請求是回發(fā)(舊請求),則調(diào)用相關(guān)的事件處理程序。 |
| 7 | 頁面渲染 | 在這個階段,頁面和所有控件的查看狀態(tài)被保存。頁面為每個控件調(diào)用Render方法,并將渲染的輸出寫入到頁面的Response屬性的OutputStream類中。 |
| 8 | 卸下/Unload | 呈現(xiàn)的頁面被發(fā)送到客戶端,并且頁面屬性(例如響應(yīng)和請求)被卸載,并且所有清理完成。 |
一個請求的頁面在處理完之后,首先被加載到服務(wù)器的內(nèi)存中,并發(fā)送到瀏覽器。 最后它從服務(wù)器內(nèi)存中卸載。 ASP.NET在頁面生命周期的每個階段提供方法和事件,我們可以在應(yīng)用程序中使用。
在頁面生命周期的每個階段,頁面會引發(fā)一些事件,這些事件可以被編碼。 事件處理程序基本上是一個函數(shù)或子例程,綁定到事件,使用聲明性的屬性,如Onclick或處理句柄。
以下是頁面生命周期事件:
| 編號 | 事件 | 描述 |
|---|---|---|
| 1 | PreInit | PreInit是頁面生命周期中的第一個事件。它檢查IsPostBack屬性并確定頁面是否是回發(fā)。它設(shè)置主題和主頁面,創(chuàng)建動態(tài)控件,并獲取和設(shè)置配置文件屬性值??梢酝ㄟ^重載OnPreInit方法或創(chuàng)建Page_PreInit處理程序來處理此事件。 |
| 2 | Init | Init事件初始化控件屬性,構(gòu)建控件樹??梢酝ㄟ^重載OnInit方法或創(chuàng)建Page_Init處理程序來處理此事件。 |
| 3 | InitComplete | InitComplete事件允許跟蹤視圖狀態(tài)。所有的控件都打開了視圖狀態(tài)跟蹤。 |
| 4 | LoadViewState | LoadViewState事件允許將視圖狀態(tài)信息加載到控件中。 |
| 5 | LoadPostData | 在這個階段,所有輸入字段的內(nèi)容都是用<form>標(biāo)簽定義的。 |
| 6 | PreLoad | PreLoad發(fā)生在回發(fā)數(shù)據(jù)加載到控件中之前??梢酝ㄟ^重載OnPreLoad方法或創(chuàng)建Page_PreLoad處理程序來處理此事件。 |
| 7 | Load | 首先為頁面引發(fā)Load事件,然后遞歸地為所有子控件引發(fā)Load事件??刂茦渲械目丶褎?chuàng)建。可以通過重載OnLoad方法或創(chuàng)建Page_Load處理程序來處理此事件。 |
| 8 | LoadComplete | 加載過程完成,控制事件處理程序運行,頁面驗證發(fā)生??梢酝ㄟ^重載OnLoadComplete方法或創(chuàng)建Page_LoadComplete處理程序來處理此事件。 |
| 9 | PreRender | PreRender事件在輸出呈現(xiàn)之前發(fā)生。通過處理此事件,頁面和控件可以在輸出呈現(xiàn)之前執(zhí)行任何更新。 |
| 10 | PreRenderComplete | 由于PreRender事件是為所有子控件遞歸觸發(fā)的,因此此事件將確保完成預(yù)渲染階段。 |
| 11 | SaveStateComplete | 頁面上的控制狀態(tài)被保存?zhèn)€性化,控制狀態(tài)和視圖狀態(tài)信息被保存,HTML標(biāo)記被生成。這個階段可以通過重寫Render方法或創(chuàng)建Page_Render處理程序來處理。 |
| 12 | UnLoad | UnLoad階段是頁面生命周期的最后階段。它遞歸地提交所有控件的UnLoad事件,最后為頁面本身。最后的清理工作已經(jīng)完成,所有的資源和引用(如數(shù)據(jù)庫連接)都被釋放了??梢酝ㄟ^修改OnUnLoad方法或創(chuàng)建Page_UnLoad處理程序來處理此事件。 |