此部分說明的生命周期只有部分:
---引用MSDN
階段 |
說明 |
頁請求 |
頁請求發生在頁生命周期開始之前。用戶請求頁時,ASP.NET 將確定是否需要分析和編譯頁(從而開始頁的生命周期),或者是否可以在不運行頁的情況下發送頁的緩存版本以進行響應。 |
開始 |
在開始階段,將設置頁屬性,如 Request和 Response在此階段,頁還將確定請求是回發請求還是新請求,並設置 IsPostBack 屬性。此外,在開始階段期間,還將設置頁的 UICulture 屬性。 |
頁初始化 |
頁初始化期間,可以使用頁中的控件,並將設置每個控件的 UniqueID 屬性。此外,任何主題都將應用於頁。如果當前請求是回發請求,則回發數據尚未加載,並且控件屬性值尚未還原為視圖狀態中的值。 |
加載 |
加載期間,如果當前請求是回發請求,則將使用從視圖狀態和控件狀態恢復的信息加載控件屬性。 |
驗證 |
在驗證期間,將調用所有驗證程序控件的 Validate 方法,此方法將設置各個驗證程序控件和頁的 IsValid 屬性。 |
回發事件處理 |
如果請求是回發請求,則將調用所有事件處理程序。 |
呈現 |
在呈現之前,會針對該頁和所有控件保存視圖狀態。在呈現階段中,頁會針對每個控件調用 Render 方法,它會提供一個文本編寫器,用於將控件的輸出寫入頁的 Response 屬性的 OutputStream 中。 |
卸載 |
完全呈現頁並已將頁發送至客戶端、准備丟棄該頁后,將調用卸載。此時,將卸載頁屬性(如Response 和 Request)並執行清理。 |
程序測試頁面加載順序

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 namespace Order 9 { 10 public partial class TestControls : System.Web.UI.Page 11 { 12 static int count = 0; 13 //4 14 protected void Page_Load(object sender, EventArgs e) 15 { 16 Response.Write(count + "----Page_Load <br/>"); 17 count++; 18 } 19 //0 20 protected override void OnPreInit(EventArgs e) 21 { 22 base.OnPreInit(e); 23 Response.Write(count + "----OnPreInit <br/>"); 24 count++; 25 } 26 //1 27 protected override void OnInit(EventArgs e) 28 { 29 base.OnInit(e); 30 Response.Write(count + "----OnInit <br/>"); 31 count++; 32 } 33 //5 34 protected override void OnLoad(EventArgs e) 35 { 36 base.OnLoad(e); 37 Response.Write(count + "----OnLoad <br/>"); 38 count++; 39 } 40 //3 41 protected override void OnPreLoad(EventArgs e) 42 { 43 base.OnPreLoad(e); 44 Response.Write(count + "----OnPreLoad <br/>"); 45 count++; 46 } 47 //6 48 protected override void OnLoadComplete(EventArgs e) 49 { 50 base.OnLoadComplete(e); 51 Response.Write(count + "----OnLoadComplete <br/>"); 52 count++; 53 } 54 //2 55 protected override void OnInitComplete(EventArgs e) 56 { 57 base.OnInitComplete(e); 58 Response.Write(count + "----OnInitComplete <br/>"); 59 count++; 60 } 61 protected override void OnUnload(EventArgs e) 62 { 63 base.OnUnload(e); 64 } 65 protected override void OnDataBinding(EventArgs e) 66 { 67 base.OnDataBinding(e); 68 Response.Write(count + "----OnDataBinding <br/>"); 69 count++; 70 } 71 //7 72 protected override void OnPreRender(EventArgs e) 73 { 74 base.OnPreRender(e); 75 Response.Write(count + "----OnPreRender <br/>"); 76 count++; 77 } 78 protected void btnGraphics_Click1(object sender, EventArgs e) 79 { 80 Response.Write(count + "----btnGraphics_Click <br/>"); 81 } 82 } 83 }
運行結果:
0----OnPreInit
1----OnInit
2----OnInitComplete
3----OnPreLoad
4----Page_Load
5----OnLoad
----Button_Click
6----OnLoadComplete
7----OnPreRender
對應事件分析:
OnPreInit:當調用該方法時,引發PreInit事件。在該事件中主要是應用App_Themes中的主題,與應用母版頁,通常這一步我們不需要做什么。
OnInit:初始化頁面所應用到的控件,然后將應用的Themes應用給控件,遞歸的觸發子空間的Init方法
OnInitComplete:它的調用標示着初始化完成,所有的控件均已經初始化完畢,所有Themes都已經應用
OnPreLoad:它的調用標示着頁面進入加載狀態,在該事件中,為自身和所有控件加載視圖狀態(??),然后會處理Request實例包含所有會發數據
OnLoad:通常用的事件,也就是Page_Load事件,Page_XXX是所有時間的一種事時間鏈接形式,如Page_Init將調用OnInit方法。這個事件可以處理回發,由於視圖狀態,Themes,子控件都已經初始化完畢,所以便於我們添加邏輯而不必擔心被其他事件把值覆蓋 掉。值得注意的是,任何頁面的Load順序是先自己,再子控件,如:一個Aspx頁面被調用Load事件,先加載本身,然后再加載如母版頁、用戶控件、第三方服務器控件等等
OnLoadComplete:標示着所有控件的加載完成。下一步則是將加載內容進行呈現
OnPreRender:該事件處理准備呈現的一些工作。如:對設置了DataSource的控件進行DataBind,通常,我們可以再這個事件上動態修改某些控件的值
OnPreRenderComplete:該事件標志着准備呈現完成,數據已經完成綁定
SaveViewState:該事件中,將序列化ViewState,然后再頁面中以一個input:hidden的元素保存試圖狀態
Render:在這個階段,框架會調用所有控件的Render方法,進行頁面呈現。以生產html頁
Unload:在頁面生命周期結束后,進行卸載