一个aspx、母版页、自定义控件的页面的生命周期小结

一、单个Page的生命周期

请求页面时引发的事件序列:(Init、Load、Render、SaveState、Unload)

(1)PreInit

  • 检查 IsPostBack 属性来确定是不是第一次处理该页。
  • 创建或重新创建动态控件。
  • 动态设置主控页。
  • 动态设置 Theme 属性。
  • 读取或设置配置文件属性值。

      说明

       如果请求是回发请求,则控件的值尚未从视图状态还原。如果在此阶段设置控件属性,则其值可能会在下一事件中被覆盖。

(2)Init

     在所有控件都已初始化且已应用所有外观设置后引发。使用该事件来读取或初始化控件属性。

(3)InitComplete

     由 Page 对象引发。使用该事件来处理要求先完成所有初始化工作的任务。

(4)PreLoad

     如果需要在 Load 事件之前对页或控件执行处理,请使用该事件。

      在 Page 引发该事件后,它会为自身和所有控件加载视图状态,然后会处理 Request 实例包括的任何回发数据。

(5)Load

     Page 在 Page 上调用 OnLoad 事件方法,然后以递归方式对每个子控件执行相同操作,如此循环往复,直到加载完本页和所有控件为止。使用 OnLoad 事件方法来设置控件中的属性并建立数据库连接。

 

(6)控件事件

     使用这些事件来处理特定控件事件,如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。

(7)LoadComplete

     对需要加载页上的所有其他控件的任务使用该事件。

(8)PreRender

      在该事件发生前:

       Page 对象会针对每个控件和页调用 EnsureChildControls。

      设置了 DataSourceID 属性的每个数据绑定控件会调用 DataBind 方法。有关更多信息,请参见本主题后面的数据绑定控件的数据绑定事件。

       页上的每个控件都会发生 PreRender 事件。使用该事件对页或其控件的内容进行最后更改。

(9)Render

       这不是事件;在处理的这个阶段,Page 对象会在每个控件上调用此方法。所有 ASP.NET Web 服务器控件都有一个用于写出发送给浏览器的控件标记的 Render 方法。

        如果创建自定义控件,通常要覆盖此方法以输出控件的标记。不过,如果自定义控件只合并标准的 ASP.NET Web 服务器控件,不合并自定义标记,则不需要覆盖 Render 方法。

       用户控件(.ascx 文件)自动合并呈现,因此不需要在代码中显式呈现该控件。

(10)SaveStateComplete

      在该事件发生前,已针对页和所有控件保存了 ViewState。将忽略此时对页或控件进行的任何更改。
      使用该事件执行满足以下条件的任务:要求已经保存了视图状态,但未对控件进行任何更改。

(11)Unload

     该事件首先针对每个控件发生,继而针对该页发生。在控件中,使用该事件对特定控件执行最后清理,如关闭控件特定数据库连接。

     对于页自身,使用该事件来执行最后清理工作,如:关闭打开的文件和数据库连接,或完成日志记录或其他请求特定任务。

     在卸载阶段,页及其控件已被呈现,因此无法对响应流做进一步更改。如果尝试调用方法(如 Response.Write 方法),则该页将引发异常。

 

二、母版页与控件

 

在页面执行生命周期过程中,首先进行的就是母版页和内容页的合并。所以唯一可以加载母版页的事件是PreInit

执行的顺序:

 

(1)母版页控件 Init 事件。

        内容控件 Init 事件。

        母版页 Init 事件。

        内容页 Init 事件。

(2)内容页 Load 事件。

        母版页 Load 事件。

        内容控件 Load 事件。

(3)内容页 PreRender 事件。

        母版页 PreRender 事件。

        母版页控件 PreRender 事件。

        内容控件 PreRender 事件。

 

即Init事件为:控件=>母版页=>内容页

而Load事件为:内容页=>母版页=>控件

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值