Page生命週期詳解

Page生命週期詳解

 

 

 

 

1)請求頁面:頁請求發生在頁生命週期開始之前。

2)開始:在開始階段,將設置頁屬性,如RequestResponse。在此階段,頁還將確定請求是回發請求還是新請求,並設置IsPostBack屬性。

3)初始化頁面:頁面初始化期間,可以使用頁中的控件,並將設置每個控件的UniqueID屬性。如果當前請求是回發請求,則回發數據尚未加載,並且控件屬性值尚未還原爲視圖狀態中的值。

4)加載頁面:加載期間,如果當前請求是回發請求,則將使用從視圖狀態和控件狀態恢復的信息加載控件屬性。

5)驗證:在驗證期間,將調用所有驗證程序控件的Validate方法,此方法將設置各個驗證程序控件和頁的IsValid屬性。

6)回發事件處理:如果請求是回發請求,則將調用所有事件處理程序。

7)呈現頁面:在頁面呈現期間,視圖狀態將被保存到頁面,然後頁面將調用每個控件,以將其呈現的輸出提供給頁的Response屬性的OutputStream

8)卸載頁面:完全呈現頁、將頁發送至客戶端並準備丟棄時,將調用卸載。此時,將卸載頁屬性(如ResponseRequest)並執行清理。

與上面的生命週期相對應的Page類的生命週期事件如圖所示。

 

 

 

Page類生命週期中各個事件的說明如表所示。

 

Page類生命週期中各個事件的說明如表所示。

Init

當服務器控件初始化時發生;初始化是控件生存期的第一步

InitComplete

在頁初始化完成時發生

PreInit

在頁初始化開始時發生

Load

當服務器控件加載到Page對象中時發生

LoadComplete

在頁生命週期的加載階段結束時發生

PreLoad

在頁Load事件之前發生

PreRender

在頁面加載控件對象之後、呈現之前發生

PreRenderComplete

在呈現頁內容之前發生

UnLoad

當服務器控件從內存中卸載時發生

Disposed

當從內存釋放服務器控件時發生,這是服務器控件生存期的最後階段

 
複製代碼
1 using System;
2 using System.Collections;
3 using System.Configuration;
4 using System.Data;
5 using System.Web;
6 using System.Web.Security;
7 using System.Web.UI;
8 using System.Web.UI.HtmlControls;
9 using System.Web.UI.WebControls;
10 using System.Web.UI.WebControls.WebParts;
11
12 public partial class _Default : System.Web.UI.Page
13 {
14 protected int i = 1;
15
16 protected void Page_PreInit(object sender, EventArgs e)
17 {
18 Response.Write(i + ".PreInit:當頁面初始化開始時發生");
19 i++;
20 Response.Write("<br>");
21 }
22
23 protected void Page_Init(object sender, EventArgs e)
24 {
25 Response.Write(i + ".Init:當服務器空間初始化時發生");
26 i++;
27 Response.Write("<br>");
28 }
29
30 protected void Page_InitComplete(object sender, EventArgs e)
31 {
32 Response.Write(i + ".InitComplete:當頁初始化完成時發生");
33 i++;
34 Response.Write("<br>");
35 }
36
37 protected void Page_PreLoad(object sender, EventArgs e)
38 {
39 Response.Write(i + ".PreLoad:當頁load事件前發生");
40 i++;
41 Response.Write("<br>");
42 }
43
44 protected void Page_Load(object sender, EventArgs e)
45 {
46 Response.Write(i + ".Load:當服務器控件加載到Page對象中時發生(加載頁面時)");
47 i++;
48 Response.Write("<br>");
49
50 //在Load和LoadComplete之間會執行控件事件.
51 //如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。
52 }
53
54 protected void Page_LoadComplete(object sender, EventArgs e)
55 {
56 Response.Write(i + ".LoadComplete:當頁面生命週期的加載階段結束時發生");
57 i++;
58 Response.Write("<br>");
59 }
60
61 protected void Page_PreRender(object sender, EventArgs e)
62 {
63 Response.Write(i + ".PreRender:當頁加載控件之後,呈現之前發生,使用該事件對頁或其控件的內容進行最後更改(預呈現)");
64 i++;
65 Response.Write("<br>");
66 }
67
68
69 protected void Page_PreRenderComplete(object sender, EventArgs e)
70 {
71 Response.Write(i + ".PreRenderComplete:呈現內容前發生.(預呈現完成)");
72 i++;
73 Response.Write("<br>");
74 }
75
76
77
78
79 protected void Page_SaveStateComplete(object sender, EventArgs e)
80 {
81 /*網頁上控件的狀態信息是在 PreRenderComplete 事件後保存的。
82 在SaveStateComplete事件之前用Trace查看頁時其實在該事件前還有
83 一個SaveState事件,只是這裏無法演示.
84
85 注意:SaveStateComplete 事件在將頁和頁上控件的視圖狀態和控件狀態保存到持久性介質之後引發。
86 這是在頁被呈現到請求瀏覽器之前引發的最後一個事件。*/
87
88 Response.Write(i + ".SaveStateComplete:在頁已完成對頁和頁上控件的所有視圖狀態和控件狀態信息的保存後發生.");
89 i++;
90 Response.Write("<br>");
91
92
93
94
95 /*最後一部操作
96 呈現:Render:
97 它不是事件;在處理的這個階段,Page 對象會在每個控件上調用此方法Render()。
98 所有 ASP.NET Web 服務器控件都有一個用於寫出發送給瀏覽器的控件標記的 Render 方法。*/
99
100
101 /*當你關閉頁面的時候就會引發UnLoad(當服務器控件從內存中卸載時發生)
102 和Disposed兩事件(當從內存釋放服務器控件時發生,這是服務器控件生存期的最後階段)
103
104 首先加載UnLoad事件:卸載頁面:完全呈現頁、將頁發送至客戶端並準備丟棄時,
105 將調用卸載。此時,將卸載頁屬性(如Response和Request)並執行清理.
106
107 最後加載Disposed事件,釋放資源,生命週期結束....
108 */
109 }
110
111 }
112
複製代碼
 
 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章