Page类分析
Page类实现了接口IhttpAplication
入口点为函数ProcessRequest
Page类中ProcessRequest函数主要调用SetIntrinsics和ProcessRequestMain
SetIntrinsics是进行最基本的初始化。
ProcessRequestMain函数分析:
(1) DeterminePostBackMode
返回回发到page的数据对象NameValueCollection.
(2) PerformPreinit
OnPreInit(EventArgs.Empty):处理PreInit事件
InitializeThemes:加载page的主题
ApplyMasterPage:应用MasterPage
(3) InitRecursive
递归调用page中各控件的initRecursive。
初始化页面中定义的所有控件。
ApplySkin:应用主题。
OnInit(EventArgs.Empty):处理init事件。
(4) OnInitComplete
处理initComplete事件。
(5) 如果页面PostBack(IsPostBack==true)
LoadAllState:
循环加载页面中控件的ControlState
递归加载页面的ViewState
ProcessPostData(Load之前):
为控件加载回传数据(会调用CreatChildControls)
(6) OnPreLoad
处理PreLoad事件。
(7) LoadRecursive
OnLoad(EventArgs.Empty):处理Page的Load事件
递归调用page中Control的LoadRecursive。
(8) 如果页面PostBack(IsPostBack==true)
ProcessPostData(Load之后):
(9) OnLoadComplete
处理LoadCompltet事件。
(10) 如果是回调(IsCallBack == true)
PrepareCallback(会调用CreatChildControls)
(11) PreRenderRecursiveInternal
递归调用控件的PreRenderRecursiveInternal
EnsureChildControls:确保控件生成,此处会调用Control的CreateChildControls方法。
OnPreRender:处理PreRender事件。
(12) SaveAllState
递归调用Control的SaveContrilState
SavePageStateToPersistenceMedium:
(13) OnSaveStateComplete
(14) CreateHtmlTextWriter
在Response.OutPut基础上构建Html32TextWriter对象
(15) RenderControl
递归调用Control的RenderControl方法,呈现最终页面内容。
RenderControl中调用Render方法。
需要注意的是,控件状态和视图状态是在Init之后取得的,控件状态和视图状态是在Render之前保存的。