西北狼

-- 学而时习之,不亦乐乎!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

从代码运行过程层面认识ASP.NET页面生命周期

Posted on 2009-07-14 23:25  西北老狼  阅读(347)  评论(0编辑  收藏  举报

从大的方面页面生命周期分为如下三个阶段:

一、初始化阶段:主要完成用客户端投递过来的数据更改页面控件的状态。具体又分如下各阶段:

      1、Begin PreInit -> End PreInit 在这个阶段,IsCallback,IsCrossPagePostback,IsPostBack被设置。在这个阶段也可以对母版页或主题进行编程。Code:

    protected void Page_PreInit(object sender, EventArgs e)
    {
        string s = Request.QueryString["theme"];
        if (s == null)
        {
            return;
        }
        if (s.Equals("1"))
        {
            Page.Theme = "Theme-1";
        }
        else
        {
            Page.Theme = "Theme-2";
        }
    }

      2、Begin Init -> End Init 此阶段首先处理子控件,然后是页面,此时ViewState尚未恢复。

      3、Begin InitComplete -> End InitComplete 表明初始化子阶段结束,在此时启用ViewState的变更跟踪功能。

      4、Begin LoadState -> End LoadState  在此时控件被恢复到上一次请求时的状态。

      5、Begin ProcessPostData -> End ProcessPostData 此阶段,用客户端投递过来的数据更新控件的状态。

      6、Begin PreLoad -> End PreLoad 此时,表明页面已完成系统的初始化。

二、准备阶段:

      7、Begin Load -> End Load 此阶段,先由页面引发,再由子控件引发,此时控件反映了从客户端投递过来的数据。

      8、Begin ProcessPostData Second Try -> End ProcessPostData Second Try

      9、Begin Raise ChangedEvents -> End Raise ChangedEvents 此时控件状态已被更改。

      10、Begin Raise PostBackEvent -> End Raise PostBackEvent 此时执行回发事件。

      11、Begin LoadComplete -> End LoadComplete 此时表明页面准备阶段的结束。

三、终结阶段:

      12、Begin PreRender -> End PreRender 此阶段,页面控件可以进行输出前的任何更改。

      13、Begin PreRenderComplete -> End PreRenderComplete 预呈现阶段的结束

      14、Begin SaveState -> End SaveState 此阶段保存ViewState(UI属性,如控件的内容),保存控件的状态(具有状态行为的属性)。

      15、Begin SaveStateComplete -> End SaveStateComplete 此时,所有控件都已完全存储在持久性介质中。

      16、Begin Render -> End Render 此阶段生成HTML标记。