Asp.Net 页面生命周期

我们知道在Asp.Net19个管道处理事件中,PostResolveRequestCache事件之后会创建IHttpHandler接口的处理类。而在PostAcquireRequestState事件之后就会执行页面的生命周期。那么他是怎么实现的呢?

打开Reflector反编译工具,我们可以看到我们的页面实现了IHttpHandler接口。

 

最重要的是ProcessRequest方法,

然后找到ProcessRequestWithNoAssert方法,继续找到ProcessRequest方法。之后有一个很重要的方法ProcessRequestMain。在这个方法里面就开始页面生命周期的执行。

首先我们看到的是DeterminePostBackMode方法。这个方法决定IsPostBack的值。然后调用PerformPreInit。在这个方法里面调用OnPreInit准备初始化Page,加载主题,应用模板页。

然后是InitRecursive方法,这个方法里面递归调用子控件的InitRecursive方法,执行OnInit,,追踪ViewSateTrackViewState(由于控件的OnInit先被执行,要想设置子控件的值不被序列化到ViewState,则可以PreInit中设置数据)

接下来调用OnInitComplete方法。然后调用 LoadAllState(在回传的时候调用)

在这个方法中调用进行ViewSate反序列化以获得ViewState

然后调用LoadControlStateInternal加载子控件的控件状态,然后加载子控件的视图状态,即把ViewState的值应用到控件中来。之后调用ProcessPostData方法(只在回传时调用)将提交到表单的值加载到控件中。接下来调用OnPreLoad,然后调用LoadRecursive,在这个方法里调用OnLoad方法,

然后递归调用子控件的LoadRecursive

然后再次调用ProcessPostData(在回传的时候调用),接着调用RaiseChangedEvents。然后是RaisePostBackEvent该方法引发实现IPostBackEventHandler接口控件的注册事件。接下来是OnLoadCompletePreRenderRecursiveInternal方法里的OnPreRender方法是改变页面和控件的最后一次机会,然后递归调用子控件的PreRenderRecursiveInternal方法。

然后是PerformPreRenderComplete方法,递归调用子控件的方法PerformPreRenderComplete,接下来是 SaveAllState,在里面调用用来保存ViewState

然后是OnSaveStateComplete

RenderControl页面呈现,最后是UnloadRecursive,结束。

版权声明:本文原创发表于 博客园,作者为 小跳蚤 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
posted @ 2013-04-02 19:15  小跳蚤  阅读(288)  评论(0编辑  收藏  举报