ASP.NET 的页面处理生命周期

来源:互联网 发布:淘宝批量发布本店产品 编辑:程序博客网 时间:2024/05/19 03:42
asp.net的页面生命周期

一、页面建立阶段
1*页面的PreInit事件发生,在这时实例化控件,建立控件树,只有页面有这个事件。
2*每个控件的Init事件发生,分配iD,启用每个控件视图状态标志(或打开或关闭)。页面的Init事件随后发生,关联母板和主题,启用页面视图状态标志(或打开或关闭)。
3*InitComplete--页面独有
4*(根据PreInit事件阶段产生的IsPostBack)恢复视图状态,每个控件都有机会恢复视图,没有与这个阶段明确的事件关联。
   可以重写LoadViewState进行定制。
5*处理投递值。投递值被封装在内部系统所使用的数据字典中,扫描控件把投递ID与控件ID进行匹配,若匹配且
  控件实现了IPostBackDataHandler接口,则页处理程序将调用控件的接口方法LoadPostData(),若返回True,则状态已经被更新,
  则该控件将被添加到一个不同的集合ChangeColl(我的命名)中,以便以后引起关注(在load事件后),比如重写集合ChangeColl中控件的ViewState状态值。
  若投递值找不到匹配控件,则留下它放在一个TempColl(我的命名)集合中,留待以后再试(为动态控件的产生提供了可能性,
   因为动态创建的控件在创建以后,在回发的时候,它会晚于投递值再次产生)。
6*preLoad事件,仅对页面有效。
7*load事件,页面先触发,然后控件递归触发。在此时用户可以放心的访问控件的视图和属性了。可以在此执行用户的业务逻辑的初始化。
二、处理回发阶段
    1*检测控件状态的变化。
      根据前面的LoadPostData的返回值,来决定是否调用另一个接口函数(RaisePostDataEvent()),它可以点火状态变化事件的发生。
    2*执行服务器端回发事件。
      若控件实现了iPostBackEventHandler接口,则若有回发动作,页面处理器会调用接口方法RaisePostBackEvent(),触发动作事件。
    3*LoadComplete事件,页面独有,表示页面准备阶段结束。用户的事件处理发生在此事件之前。(这在页面渲染之前发生,这就是为什么在事件处理程序中
      Response.write("dds")的显示总在Response流的最前面的原因)
三、页面结束阶段
    1*PreRender事件,先为页面触发,然后为控件递归触发。
    2*PreRenderComplete页面独有。
    3*SaveStateComplete事件,保存视图状态。可以重写SavePageStateToPersistenceMedium() 和this.LoadPageStateFromPersistenceMedium(),来把视图状态
      存到服务器或会话状态中,从而减少页面大小。
    4*Render事件
    5*unload事件,先控件递归后页面。
 
原创粉丝点击