Fork me on GitHub
Page类分析

Page类分析

Page类实现了接口IhttpAplication

入口点为函数ProcessRequest

Page类中ProcessRequest函数主要调用SetIntrinsicsProcessRequestMain

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)      如果页面PostBackIsPostBack==true

LoadAllState

循环加载页面中控件的ControlState

递归加载页面的ViewState

ProcessPostDataLoad之前):

为控件加载回传数据(会调用CreatChildControls

(6)      OnPreLoad

处理PreLoad事件。

(7)      LoadRecursive

OnLoad(EventArgs.Empty):处理PageLoad事件

递归调用pageControlLoadRecursive

(8)      如果页面PostBackIsPostBack==true

ProcessPostData(Load之后):

(9)      OnLoadComplete

处理LoadCompltet事件。

(10) 如果是回调(IsCallBack == true

PrepareCallback(会调用CreatChildControls)

(11) PreRenderRecursiveInternal

递归调用控件的PreRenderRecursiveInternal

EnsureChildControls:确保控件生成,此处会调用ControlCreateChildControls方法。

OnPreRender:处理PreRender事件。

(12) SaveAllState

递归调用ControlSaveContrilState

SavePageStateToPersistenceMedium

(13) OnSaveStateComplete

(14) CreateHtmlTextWriter

Response.OutPut基础上构建Html32TextWriter对象

(15) RenderControl

递归调用ControlRenderControl方法,呈现最终页面内容。

RenderControl中调用Render方法。

需要注意的是,控件状态和视图状态是在Init之后取得的,控件状态和视图状态是在Render之前保存的。

posted on 2010-06-30 11:48  HackerVirus  阅读(404)  评论(0)    收藏  举报