ASP.NET Page執行順序(ASP.NET生命周期)


此部分說明的生命周期只有部分:

---引用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 }
View Code

運行結果:

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:在頁面生命周期結束后,進行卸載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM