页面生命周期(需完善)
1.创建控件树
2.设置IsPostBack,根据__VIEWSTATE值是否为空
3.创建控件树实例
4.处理ViewState
5.执行Page_Load()方法
6.处理ViewState
7.调用页面事件的响应方法.
8.SaveViewState.
9.渲染页面.
-------
System.Web.UI.Page生命周期
1.Page_PreInit()
a.设置IsPostBack
b.创建动态控件(创建页面树?????)
c.动态设置母版页
d.动态设置Theme属性
2.Page_Init() 创建页面类对象.创建页面树,
3.Load ViewState
4.Load PostBackData
5.Page_Load()
6.Handle control events
7.Page_PreRender()
8.Page_Render()
9.Unload event
10.Dispose method called
-----------------------------
页面生命周期内部处理过程
第一步:根据页面Request的是否含有ViewState值,判断和设置IsPostBack(可以造假,在QueryString中附带
ViewState键值对可以使IsPostBack误判)
第二步:页面初始化之前Page_PreInit()
this.PerformPreInit();
private void PerformPreInit()
{
this.OnPreInit(EventArgs.Empty);//
this.InitialiseThemes();//初始化主题,如已经设置主题直接退出,如果没有设置根据配置来设置.
this.ApplyMasterPage();//设置母版页
this._preInitWordComplete=true;
}
第三步:
OnInit():触发事件开始初始化
this.OnIniteComplete(EventArgs.Empty)//初始化结束
第四步: 处理回发数据
if(this.IsPostBack)
{
this.LoadAllState();//加载所有的ViewState,Page以及控件
this.ProcessPastData(this._requestValueCollection,true);//处理回发数据,看那些控件发生变化了
,然后调用下面方法注册控件触发的事件.
this.RegisterRequiresRaiseEvent(control.PostBackEventHandler); //注册要触发事件的控件.
}
第五步:
this.OnPreLoad(EventArgs.Empty);//触发预加载事件;
第六步:
Onload();//触发加载事件,即执行this.Page_load();方法
this.LoadRecursive();//递归加载
第七步:
this.ProcessPastData(this._leftoverPstData,true);//加载回发的post数据到控件上
this.RaiseChangedEvents();//触发事件
this.RasePostBackEvent(this._requestValueCollection);//触发事件
第八步:
this.OnLoadComplete(EventArgs.Empty);
第九步:
this.PrepareCallback(callbackControlID);
第十步:Unload卸载dispose();

浙公网安备 33010602011771号