页面生命周期(需完善)

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();

posted @ 2013-07-27 17:33  空中漫步2001  阅读(184)  评论(0)    收藏  举报