.Net_asp.net页面的生命周期
页面的生命周期
页面pr方法内部处理过程:
第一步:创建页面控件树,根据 Form里面的请求内容(ViewState)确定是否是IsPostBack
第二步:页面初始化之前
this.PerformPreInit();
private void PerformPreInit()
{
this.OnPreInit(EventArgs.Empty);//一般在这里面设置主题,加载模板由
this.InitializeThemes();//初始化主题,如果已经设置主题直接退出,如果没有设置根据配置来。
this.ApplyMasterPage();//设置模板页,如果模板页已经存在(如在OnInit代码里面设置了新的模板页就不走原来的了)就结束
this._preInitWorkComplete = true;
}
第三步:
OnInit()执行
this.OnInitComplete(EventArgs.Empty);//初始化结束;
第四步:处理回发数据
if(IsPostBack)
{
this.LoadAllState();//加载所有的ViewSate:Page以及控件的
this.ProcessPostData(this._requestValueCollection, true);//处理回发数据,就是看一下哪些控件变化了,然后调用下面的方法
this.RegisterRequiresRaiseEvent(control.PostBackEventHandler);//注册要触发事件的控件
}
第五步:
this.OnPreLoad(EventArgs.Empty);//调用加载的事件
第六步:
Onload()
this.LoadRecursive();//递归加载,把所有控件里面的Load事件触发了
第七步:
if(IsPostBack)
{
this.ProcessPostData(this._leftoverPostData, false);//再处理一下ViewState数据
this.RaiseChangedEvents();//调用一些需要ViewState参与才能感知 事件的方法执行
this.RaisePostBackEvent(this._requestValueCollection);//调用 按钮的click事件处理
}
第八步:
this.OnLoadComplete(EventArgs.Empty);加载完。
第十步:
this.PrepareCallback(callbackControlID);//为 IsPostback设置标志
this.PreRenderRecursiveInternal();//加载html,渲染服务器端控件之前,允许你最后一次改变当前控件东西
this.SaveAllState();//保存ViewState
this.OnSaveStateComplete(EventArgs.Empty);//保存完成
this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));//把服务器控件转变成浏览器能识别的Html代码
this._context.ApplicationInstance.CompleteRequest();
//最后生成响应报文返回给浏览器。