1
using
System;
2
using
System.Data;
3
using
System.Configuration;
4
using
System.Web;
5
using
System.Web.Security;
6
using
System.Web.UI;
7
using
System.Web.UI.WebControls;
8
using
System.Web.UI.WebControls.WebParts;
9
using
System.Web.UI.HtmlControls;
10
public
partial
class
_Default : Page
11
{
12
protected
void
Page_Load(
object
sender, EventArgs e)
13
{
14
}
15
#region
OnPreInit 第一步
16
protected
override
void
OnPreInit(EventArgs e)
17
{
18
//
检查 IsPostBack 属性来确定是不是第一次处理该页。
19
//
创建或重新创建动态控件。
20
//
动态设置主控页。
21
//
动态设置 Theme 属性。
22
//
读取或设置配置文件属性值。
23
//
注意
24
//
如果请求是回发请求,则控件的值尚未从视图状态还原。如果在此阶段设置控件属性,则其值可能会在下一事件中被重写。
25
26
base
.OnPreInit(e);
27
}
28
#endregion
29
#region
OnInit 第二步
30
protected
override
void
OnInit(EventArgs e)
31
{
32
//
在所有控件都已初始化且已应用所有外观设置后引发。使用该事件来读取或初始化控件属性。
33
base
.OnInit(e);
34
}
35
#endregion
36
#region
OnInitComplete 第三步
37
protected
override
void
OnInitComplete(EventArgs e)
38
{
39
//
由 Page 对象引发。使用该事件来处理要求先完成所有初始化工作的任务。
40
base
.OnInitComplete(e);
41
}
42
#endregion
43
#region
PreLoad 第四步
44
protected
override
void
OnPreLoad(EventArgs e)
45
{
46
//
如果需要在 Load 事件之前对页或控件执行处理,请使用该事件。
47
//
在 Page 引发该事件后,它会为自身和所有控件加载视图状态,然后会处理 Request 实例包括的任何回发数据。
48
base
.OnPreLoad(e);
49
}
50
#endregion
51
#region
OnLoad 第五步
52
protected
override
void
OnLoad(EventArgs e)
53
{
54
//
Page 在 Page 上调用 OnLoad 事件方法,然后以递归方式对每个子控件执行相同操作,如此循环往复,直到加载完本页和所有控件为止。
55
//
使用 OnLoad 事件方法来设置控件中的属性并建立数据库连接。
56
base
.OnLoad(e);
57
}
58
#endregion
59
#region
控件事件 第六步
60
protected
void
Button1_Click(
object
sender, EventArgs e)
61
{
62
//
用这些事件来处理特定控件事件,如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。
63
//
注意
64
//
在回发请求中,如果页包含验证程序控件,请在执行任何处理之前检查 Page 和各个验证控件的 IsValid 属性。
65
66
}
67
#endregion
68
#region
OnLoadComplete 第七步
69
protected
override
void
OnLoadComplete(EventArgs e)
70
{
71
//
对需要加载页上的所有其他控件的任务使用该事件。
72
base
.OnLoadComplete(e);
73
}
74
#endregion
75
#region
OnPreRender 第八步
76
protected
override
void
OnPreRender(EventArgs e)
77
{
78
//
在该事件发生前:
79
//
Page 对象会针对每个控件和页调用 EnsureChildControls。
80
//
设置了 DataSourceID 属性的每个数据绑定控件会调用 DataBind 方法。有关更多信息,请参见下面的数据绑定控件的数据绑定事件。
81
//
页上的每个控件都会发生 PreRender 事件。使用该事件对页或其控件的内容进行最后更改。
82
base
.OnPreRender(e);
83
}
84
#endregion
85
#region
SaveStateComplete 第九步
86
protected
override
void
OnSaveStateComplete(EventArgs e)
87
{
88
//
在该事件发生前,已针对页和所有控件保存了 ViewState。将忽略此时对页或控件进行的任何更改。
89
//
使用该事件执行满足以下条件的任务:要求已经保存了视图状态,但未对控件进行任何更改。
90
base
.OnSaveStateComplete(e);
91
}
92
#endregion
93
#region
Render 第十步
94
//
Render
95
//
这不是事件;在处理的这个阶段,Page 对象会在每个控件上调用此方法。所有 ASP.NET Web 服务器控件都有一个用于写出发送给浏览器的控件标记的 Render 方法。
96
//
如果创建自定义控件,通常要重写此方法以输出控件的标记。不过,如果自定义控件只合并标准的 ASP.NET Web 服务器控件,不合并自定义标记,则不需要重写 Render 方法。有关更多信息,请参见开发自定义 ASP.NET 服务器控件。
97
//
用户控件(.ascx 文件)自动合并呈现,因此不需要在代码中显式呈现该控件。
98
#endregion
99
#region
OnUnload 第十一步
100
protected
override
void
OnUnload(EventArgs e)
101
{
102
//
该事件首先针对每个控件发生,继而针对该页发生。在控件中,使用该事件对特定控件执行最后清理,如关闭控件特定数据库连接。
103
//
对于页自身,使用该事件来执行最后清理工作,如:关闭打开的文件和数据库连接,或完成日志记录或其他请求特定任务。
104
//
注意
105
//
在卸载阶段,页及其控件已被呈现,因此无法对响应流做进一步更改。如果尝试调用方法(如 Response.Write 方法),则该页将引发异常。
106
107
base
.OnUnload(e);
108
}
109
#endregion
110
}
111
112
当页面进行回发时,如点击按钮,以上事件都会重新执行一次,这时的执行顺序为:
113
1
. OnPreInit
114
2
. OnInit
115
3
. OnInitComplete
116
4
. OnPreLoad
117
5
. Page_Load
118
6
. OnLoad
119
7
. Button_Click
120
8
. OnLoadComplete
121
9
. OnPreRender
122
可以看到,Button_Click事件位于OnLoad之后执行,可以测试一下:
123
public
partial
class
TestControls : System.Web.UI.Page
124
{
125
static
int
count
=
0
;
126
protected
void
Page_Load(
object
sender, EventArgs e)
127
{
128
Response.Write(count
+
"
Page_Load <br />
"
);
129
count
++
;
130
}
131
protected
override
void
OnPreInit(EventArgs e)
132
{
133
base
.OnPreInit(e);
134
Response.Write(count
+
"
OnPreInit <br />
"
);
135
count
++
;
136
}
137
protected
override
void
OnInit(EventArgs e)
138
{
139
base
.OnInit(e);
140
Response.Write(count
+
"
OnInit <br />
"
);
141
count
++
;
142
}
143
protected
override
void
OnLoad(EventArgs e)
144
{
145
base
.OnLoad(e);
146
Response.Write(count
+
"
OnLoad <br />
"
);
147
count
++
;
148
}
149
protected
override
void
OnPreLoad(EventArgs e)
150
{
151
base
.OnPreLoad(e);
152
Response.Write(count
+
"
OnPreLoad <br />
"
);
153
count
++
;
154
}
155
protected
override
void
OnLoadComplete(EventArgs e)
156
{
157
base
.OnLoadComplete(e);
158
Response.Write(count
+
"
OnLoadComplete <br />
"
);
159
count
++
;
160
}
161
protected
override
void
OnInitComplete(EventArgs e)
162
{
163
base
.OnInitComplete(e);
164
Response.Write(count
+
"
OnInitComplete <br />
"
);
165
count
++
;
166
}
167
protected
override
void
OnUnload(EventArgs e)
168
{
169
base
.OnUnload(e);
170
}
171
protected
override
void
OnDataBinding(EventArgs e)
172
{
173
base
.OnDataBinding(e);
174
Response.Write(count
+
"
OnDataBinding <br />
"
);
175
count
++
;
176
}
177
protected
override
void
OnPreRender(EventArgs e)
178
{
179
base
.OnPreRender(e);
180
Response.Write(count
+
"
OnPreRender <br />
"
);
181
count
++
;
182
}
183
protected
void
btnGraphics_Click(
object
sender, EventArgs e)
184
{
185
//
Bitmap bmp = new Bitmap(10, 10);
186
//
Graphics g = Graphics.FromImage(bmp);
187
Response.Write(count
+
"
btnGraphics_Click <br />
"
);
188
count
++
;
189
}
190
}