一个页面的生命周期大概有以下七个:
1. 开始:实例化页面,设置页面的Response,Request,IsPostBack属性,设置页面的UICultrue属性.
2. 页初始化:实例化控件,设置控件的Unique属性(PreInit事件àInit事件àInitComplete事件)
3. 控件状态维护和还原(加载期间):使用从视图状态和控件状态恢复的信息加载控件属性。(PreLoad事件àload事件)
4. 验证:验证期间将会调用所有控件的Validate()方法,同时设置Page.IsValid属性和所有控件的IsValid属性。
5. 事件处理
6. 页面的呈现(PreRender事件àSaveState方法àOnSaveCompleteàRender方法)
7. 卸载(对应UnLoad事件)
Page_Load 和Onload事件.
Onload事件是在System.Web.UI.Control类中定义的。
AutoEventWire=true的时候,Page_load实际上是this.Load+= new EventHandler(this.Page_Load)
Control中的OnLoad代码如下:
protected internal virtual void OnLoad(EventArgs e)
{
if (this.HasEvents())
{
EventHandler handler = this._events[EventLoad] as EventHandler;
if (handler != null)
{
handler(this, e);
}
}
}
this.Load中的Load是事件的定义,代码如下:
[WebSysDescription("Control_OnLoad")]
public event EventHandler Load
{
add
{
this.Events.AddHandler(EventLoad, value);
}
remove
{
this.Events.RemoveHandler(EventLoad, value);
}
}
this.Events中的Event是属性,代码如下:
protected EventHandlerList Events
{
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
get
{
if (this._events == null)
{
this._events = new EventHandlerList();
}
return this._events;
}
}
这样在Page生命周期发执行OnLoad的时候,就会唤起Load事件,并执行用户定义的Page_Load方法
(前提是有调用base.OnLoad(e))