ASP.NET页生命周期概述
ASP.NET页被翻译输出到浏览器的过程可分为几个阶段,这些阶段在页面的创建和翻译中有各自不同的目的.了解页面的生命周期非常重要,这样就能在合适的生命周期阶段编写代码,以达到预期效果.要记住的一个关键概念是,不论何种情况下,一个ASP.NET页的实例化和销毁是在同一个请求下完成的.
一、 下面例出了常规页生命周期所经历的若干阶段:
(1) 、请求页面: 页面的请求发生在页面生命周期开始之前.即页面实例化之前.当用户请求位于Web服务器上的某页面时,ASP.NET检查缓存中是否存在该页面的翻译输出,若有,则直接将缓存中的结果返回给客户端,略去ASP.NET页生命周期中的其他阶段;若无,则进入下一个阶段,即页面开始阶段.
(2)、页面开始: 在这个阶段,页面被实例化,输入/输出属性Request 和Response被设置。此外,ISPostback属性被设置,该属性说明请求是一个新请求,还是由以前翻译输出的ASP.NET页所发起的请求。还有UICulture属性被设置。
(3)、页初始化:在初始化阶段,控件被实例化(将设置每个控件的UniqueID属性),并且页面的层次被构造。此外,主题和外观信息被应用到页面。如果当前请求是回发请求,则回发数据尚未加载,并且控件的属性此时并没有还原为视图状态的值。
(4)、加载:在加载阶段,如果当前请求是一个回递,则控件的属性将从视图状态赋值。
(5)、确认(验证):在确认(验证)期间,将确认页面中所有控件的状态,将调用页面中各控件的Validate方法,从而确定了页面的IsValid 属性的状态。确认阶段用于对用户的输入施加规则约束。
(6)、回递事件处理:如果请求是一个回递,则将调用所有事件处理程序。诸如鼠标点击、索引改变等事件的处理。重要的一点是要记住,事件处理器是在页面的加载阶段完成之后才被调用。
(7)、呈现(翻译):在呈现期间,视图状态将被保存到页,然后也将调用每个控件,以将其呈现的输出提供给页的Response属性的OutputStream.
(8)、卸载:当完全呈现页,即页完全翻译输出,其他控件都不再产生翻译输出时,便进入卸载阶段。
二、页面生命周期中的事件
(1)、Page_PreInit : 该事件在初始化阶段的开始被调用。典型的使用有
+ 使用IsPostBack属性确定是否是第一次处理该页
+创建或重新创建动态控件
+动态设置主控页
+动态设置Theme属性
+读取或设置配置文件属性值
注意:如果请求是回发请求,则控件的值尚未从视图状态还原。如果在此阶段设置控件属性,则其值可能会在下一阶段被改写。
(2)、Page_Init:在初始化阶段被调用,用来对控件属性初始化。
(3)、Page_Load:读取和更新已有的控件属性。在这个阶段,控件属性已经根据视图状态被重新设置。
(4)、控件事件:调用控件自身的事件,例如响应鼠标电击、改变ListBox的索引值等等。如果页面有验证控件,在调用事件处理器之前,需要检查控件和页面的IsValid状态
(5)、Page_PreRender:对页面进行最后的更改
(6)、Page_Unload :该事件在ASP.NET丢弃页面来处理成本较高的数据库连接等资源之前被调用。此事件也常常用于记录最终的日志和跟踪信息。