ASP.NET頁面生命周期與應用程序生命周期
ASP.NET頁面生命周期與應用程序生命周期
頁面生命周期
頁面生命周期執行一系列步驟:頁面的初始化、實例化控件、還原和維護狀態、運行事件處理程序代碼、呈現。為了在合適的階段執行所需的代碼,所以要對頁面生命周期非常熟悉。在頁生命周期的各個階段,頁面會逐個引發定義的事件,通過對代碼開發,在頁面的生命事件中執行我們所需要的程序
頁生命周期階段
1、 頁請求:發生在頁面生命周期之前,用戶請求頁時,ASP.NET將確定是否需要分析和編譯頁,從而確定是否開始頁面的生命周期,或者是否可以在不運行頁的情況下發送頁面緩存以進行響應。
2、 開始:設置頁屬性,如:HttpContext以及其他屬性;在此階段,頁面需要確定是回發請求還是新請求,并設置IsPostBack屬性;設置頁面的UICulture屬性。
3、 頁面初始化:加載所有主題;控件生成,并設置UniqueID;
注:ViewState、ControlState中的值還未加載至控件;如果頁面是回發,則回發數據也還未加載;故此時控件可以訪問,但值可能出錯。
4、 加載:如果當前請求是回發請求,則為控件加載ViewState和ControlState中的值。
5、 驗證:調用所有驗證程序控件的Validate方法,此方法將設置驗證程序控件和頁的IsValid屬性。
6、 回發事件處理:如果請求是回發請求,則調用所有事件處理程序。
7、 呈現:首先對該頁和所有控件進行保存視圖狀態,然后對每個控件調用Render方法,它會提供一個文本編寫器,用于將控件的輸入寫入頁的Response屬性的OutputStream中。
8、 卸載:完成呈現,并已將頁發送至客戶端、準備丟棄該頁后,調用卸載。將卸載屬性如:Response和Request等等。
頁生命周期事件:
1、PreInit
完成操作:檢查IsPostBack屬性來確定是不是第一次處理該頁;
創建或重新創建動態控件
動態設置主控頁
動態設置Theme屬性
讀取或設置配置文件屬性
注:如果請求是回發請求,則控件的值尚未從視圖狀態恢復,即:不應該在此事件中設置控件屬性。
2、Init
完成操作:在所有控件都已經初始化并且應用所有外觀設置后引發。使用該事件來讀取和初始化控件屬性。
3、InitComplete
完成操作:由Page對象引發,使用該事件來處理要求完成所有初始化工作的任務。
4、PreLoad
完成操作:為頁和所有控件加載視圖狀態,然后處理Request 實例包括的任何回發數據。
注:如果需要在Load之前對頁或控件進行處理,需要該事件。
5、Load
完成操作:以遞歸方式加載所有控件。
6、控件事件
完成操作:處理控件引發的事件。
注:在回發請求中,如果頁包含驗證程序控件,請在執行任何處理之前檢查Page和各個驗證控件的IsValid屬性。
7、LoadComplete
8、PreRender
在控件輸出前最后的修改機會。
注:在該事件發生前的操作:
Page對所有控件遞歸進行EnsureChildControl操作
設置了DataSourceID屬性的數據綁定控件會調用DataBind方法。
9、SaveStateComplete
在該事件發生前,已經對控件的ViewState進行了保存。將忽略對頁和控件所作的所有修改。
10、Render
方法,便于開發
11、UnLoad
應用程序生命周期
在應用程序的生命周期期間,應用程序會引發可處理的事件并調用可重寫的特定方法。若要處理應用程序事件或方法,可以在應用程序根目錄中創建一個名為 Global.asax 的文件。如果創建了 Global.asax 文件,ASP.NET 會將其編譯為從 HttpApplication 類派生的類,然后使用該派生類表示應用程序。
HttpApplication 進程的一個實例每次只處理一個請求。由于在訪問應用程序類中的非靜態成員時不需要將其鎖定,這樣可以簡化應用程序的事件處理過程。這樣還可以將特定于請求的數據存儲在應用程序類的非靜態成員中。例如,可以在 Global.asax 文件中定義一個屬性,然后為該屬性賦一個特定于請求的值。
Application_Start 和 Application_End 方法是不表示 HttpApplication 事件的特殊方法。在應用程序域的生命周期期間,ASP.NET 僅調用這些方法一次,而不是對每個 HttpApplication 實例都調用一次。
作者:
RDIF
出處:
http://www.rzrgm.cn/huyong/
Email:
406590790@qq.com
QQ:
406590790
微信:
13005007127(同手機號)
框架官網:
http://www.guosisoft.com/
http://www.rdiframework.net/
框架其他博客:
http://blog.csdn.net/chinahuyong
http://www.rzrgm.cn/huyong
國思RDIF開發框架
,
給用戶和開發者最佳的.Net框架平臺方案,為企業快速構建跨平臺、企業級的應用提供強大支持。
關于作者:系統架構師、信息系統項目管理師、DBA。專注于微軟平臺項目架構、管理和企業解決方案,多年項目開發與管理經驗,曾多次組織并開發多個大型項目,在面向對象、面向服務以及數據庫領域有一定的造詣。現主要從事基于
RDIF
框架的技術開發、咨詢工作,主要服務于金融、醫療衛生、鐵路、電信、物流、物聯網、制造、零售等行業。
如有問題或建議,請多多賜教!
本文版權歸作者和CNBLOGS博客共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,可以通過微信、郵箱、QQ等聯系我,非常感謝。

浙公網安備 33010602011771號