ASP.NET生命週期
ASP.NET生命週期如何指定?如下說明:
- ASP.NET處理頁面以產生動態輸出
- 應用程序及其頁面被實例化和處理
- ASP.NET動態編譯成頁面
ASP.NET的生命週期可以分爲兩組:
- 應用程序生命週期
- 頁面生命週期
ASP.NET應用程序生命週期
應用程序生命週期有以下幾個階段:
- 用戶請求訪問應用程序資源,頁面。瀏覽器將此請求發送到Web服務器。
- 統一管道接收第一個請求,併發生以下事件:
-
ApplicationManager
類的一個對象被創建。 - 創建
HostingEnvironment
類的一個對象來提供有關資源的信息。 - 編譯應用程序中的頂級項目。
-
- 響應(
Response
)對象被創建。應用程序對象,如HttpContext
,HttpRequest
和HttpResponse
被創建和初始化。 -
HttpApplication
對象的一個實例被創建並分配給請求。 - 該請求由
HttpApplication
類處理,這個類處理請求的不同事件。
ASP.NET頁面生命週期
當一個頁面被請求時,它被加載到服務器內存中,進行處理併發送到瀏覽器。 然後它從內存中卸載。在這些步驟的每個步驟中,都有可用的方法和事件,這些方法和事件可以根據應用程序的需要進行覆蓋。換句話說,您可以編寫自己的代碼來覆蓋默認代碼。
Page
類創建頁面上所有控件的分層樹。頁面上的所有組件(指令除外)都是此控件樹的一部分。可以通過將trace =「true」
添加到頁面指令來查看控件樹。我們將涵蓋頁面指令,並在「指令」和「事件處理」下的跟蹤。
頁面生命週期階段是:
- 初始化
- 實例化頁面上的控件
- 恢復和維護狀態
- 執行事件處理程序代碼
- 頁面渲染
瞭解頁面循環有助於編寫代碼,使頁面生命週期的任何階段都能發生一些特定的事情。 它還有助於編寫自定義控件並在正確的時間初始化它們,使用視圖狀態數據填充它們的屬性並運行控制行爲代碼。
以下是ASP.NET頁面的不同階段:
編號
階段
描述/說明
1
頁面請求
當ASP.NET獲得一個頁面請求時,它決定是否解析和編譯該頁面,或者會使用一個緩存的頁面版本。相應地發送響應。
2
開始頁面生命週期
在這個階段,Request
和Response
對象被設置。如果請求是舊請求或回發,則頁面的IsPostBack
屬性設置爲true
。頁面的UICulture
屬性也被設置。
3
頁面初始化
在此階段,通過設置UniqueID
屬性並應用主題,頁面上的控件被分配唯一ID。 對於新的請求,加載回發數據並將控件屬性恢復爲視圖狀態值。
4
頁面加載
在此階段,使用視圖狀態和控件狀態值設置控件屬性。
5
驗證
驗證控件的驗證方法被調用,並在成功執行時,頁面的IsValid
屬性設置爲true。
6
回發事件處理
如果請求是回發(舊請求),則調用相關的事件處理程序。
7
頁面渲染
在這個階段,頁面和所有控件的查看狀態被保存。頁面爲每個控件調用Render
方法,並將渲染的輸出寫入到頁面的Response
屬性的OutputStream
類中。
8
卸下/Unload
呈現的頁面被髮送到客戶端,並且頁面屬性(例如響應和請求)被卸載,並且所有清理完成。
一個請求的頁面在處理完之後,首先被加載到服務器的內存中,併發送到瀏覽器。 最後它從服務器內存中卸載。 ASP.NET在頁面生命週期的每個階段提供方法和事件,我們可以在應用程序中使用。
ASP.NET頁面生命週期事件
在頁面生命週期的每個階段,頁面會引發一些事件,這些事件可以被編碼。 事件處理程序基本上是一個函數或子例程,綁定到事件,使用聲明性的屬性,如Onclick
或處理句柄。
以下是頁面生命週期事件:
編號
事件
描述
1
PreInit
PreInit
是頁面生命週期中的第一個事件。它檢查IsPostBack
屬性並確定頁面是否是回發。它設置主題和主頁面,創建動態控件,並獲取和設置配置文件屬性值。可以通過重載OnPreInit
方法或創建Page_PreInit
處理程序來處理此事件。
2
Init
Init
事件初始化控件屬性,構建控件樹。可以通過重載OnInit
方法或創建Page_Init
處理程序來處理此事件。
3
InitComplete
InitComplete
事件允許跟蹤視圖狀態。所有的控件都打開了視圖狀態跟蹤。
4
LoadViewState
LoadViewState
事件允許將視圖狀態信息加載到控件中。
5
LoadPostData
在這個階段,所有輸入字段的內容都是用<form>
標籤定義的。
6
PreLoad
PreLoad
發生在回發數據加載到控件中之前。可以通過重載OnPreLoad
方法或創建Page_PreLoad
處理程序來處理此事件。
7
Load
首先爲頁面引發Load
事件,然後遞歸地爲所有子控件引發Load
事件。控制樹中的控件已創建。可以通過重載OnLoad
方法或創建Page_Load
處理程序來處理此事件。
8
LoadComplete
加載過程完成,控制事件處理程序運行,頁面驗證發生。可以通過重載OnLoadComplete
方法或創建Page_LoadComplete
處理程序來處理此事件。
9
PreRender
PreRender
事件在輸出呈現之前發生。通過處理此事件,頁面和控件可以在輸出呈現之前執行任何更新。
10
PreRenderComplete
由於PreRender
事件是爲所有子控件遞歸觸發的,因此此事件將確保完成預渲染階段。
11
SaveStateComplete
頁面上的控制狀態被保存個性化,控制狀態和視圖狀態信息被保存,HTML標記被生成。這個階段可以通過重寫Render
方法或創建Page_Render
處理程序來處理。
12
UnLoad
UnLoad
階段是頁面生命週期的最後階段。它遞歸地提交所有控件的UnLoad
事件,最後爲頁面本身。最後的清理工作已經完成,所有的資源和引用(如數據庫連接)都被釋放了。可以通過修改OnUnLoad
方法或創建Page_UnLoad
處理程序來處理此事件。
易百教程移動端:請掃描本頁面底部(右側)二維碼並關注微信公衆號,回覆:"教程" 選擇相關教程閱讀或直接訪問:http://m.yiibai.com 。
上一篇:ASP.NET開發環境配置 下一篇:ASP.NET第一個程序
加QQ羣啦,易百教程官方技術學習羣
QQ羣名稱
羣號
人數
免費
等級
羣介紹
JAVA技術
227270512
2000
否
LV5
Java基礎,JSP(Servlet),JAVA框架,Java高併發架構,Maven等等
MySQL/SQL
418407075
2000
否
LV5
SQL基礎,MySQL基礎,MySQL存儲過程,視圖,觸發器等等
大數據開發
655154550
2000
否
LV5
Spark,zookeeper,kafka,CDH,hive,fulme,hbase等Hadoop雲計算生態圈技術
Python技術
287904175
2000
否
LV5
Python編程,Python Web,Python大數據,Python爬蟲,自然語言處理等
Linux技術
479429477
2000
是
LV1
Redhat/Centos,Ubuntu,Shell,運維,監控等技術
PHP/Web開發者
460153241
1000
是
LV0
PHP基礎,PHP高級,網站優化/架構,JS,HTML,JQuery,前端等Web開發技術
人工智能
456236082
1000
是
LV0
人工智能,深度學習,算法等技術
Oracle數據庫
175248146
1000
是
LV0
SQL基礎,Oracle基礎,Oracle存儲過程,視圖,觸發器等等
Android開發
159629185
1000
是
LV0
Android開發,Android Studio,Kotlin,Dagger等技術
微軟技術
579821706
1000
是
LV0
C#,ASP.Net,VB.Net,ADO.Net,SQL Server,VBA,Excel等技術