ASP.NET页面生存周期(理论)

一. 初始化  - Init 事件 (OnInit 方法) 初始化对象
    当有来自客户端的请求时,asp.net绘制一个全新的页面,初始化页面对象,例如可以在加载控件之前检测客户端环境变量。注意,每次加载时都会触发这个事件(也有说:网页重新加载时不会触发这个事件)。

二. 加载视图状态 - (没有对应事件)LoadViewState方法 导入Viewstate数据

三. 处理回发数据 - LoadPostData 方法
    对实现 IPostBackDataHandler 接口的控件,即可以自动加载回发数据的控件,如 TextBox, DropDownList(Button不是) 等。当一个页面提交一个表单时,框架就在每个提交了数据的控件上执行一个IPostBackDataHandler接口操作。然后页面执行LoadPostData事件,解析页面,找到每个执行了IpostBackDataHandler接口操作的控件,并用恰当的postback数据更新这些控件状态。在LoadPostData事件后,就要执行下面的RaisePostDataChanged事件了。
注:IPostBackDatahandler接口有LoadPostData方法(当由某个类实现时,它为 ASP.NET 服务器控件处理回发数据Msdn)和RaisePostDataChangedEvent方法(当由类实现时,它用信号要求服务器控件对象通知 ASP.NET 应用程序该控件的状态已更改。Msdn)

四. 加载 - Load 事件 (OnLoad 方法)
    当页面被读入(加载入)内存,进行处理时触发该事件,每次刷新时,.net都会为他绘制一个全新的页面,所以,每次重新加载都会触发这个事件。在Load事件中,对象都实例化了,所有的对象第一次被布置在DOM页面(在Asp.net中称控件树)里了并且可以通过代码或是相关的位置被引用。这样,对象就可以很容易的从客户端获得诸如宽度、高度、值、可见性等在Html中的属性值。在Load事件中,当然还有像设置控件属性等操作的发生。这个过程是整个生命周期中最重要、最主要的,你可以通过调用OnLoad来重载Load事件

五. 发送回发更改通知 - RaisePostDataChangedEvent 方法
    对实现 IPostBackDataHandler 接口的控件,即可以自动加载回发数据的控件。
    在第 3 步中加载回发数据,如果回发前后数据发生更改,则在这一步触发相应的服务端事件。就像在上面提到的那样,这个事件是发生在所有的控件执行了IPostBackDataHandler接口操作并被正确的postback数据更新后的。在这个过程中,每个控件都被赋予一个布尔值来标志该控件有没有被更新。然后,Asp.net就在整个页面上寻找任何已被更新过的控件并执行RaisePostDataChanged事件操作。不过,这个事件是要在所有的控件都被更新了以及Load事件完成后才进行的。这样就保证了一个控件在被postback数据更新前,别的控件在RaisePostDataChanged事件中是不会被手动改变的。

六. 处理回发事件 - RaisePostBackEvent 方法
   对实现 IPostBackEventHandler 接口的控件,即能引起回发的控件,如 Button, LinkButton, Calendar 等

七. 预呈现 - PreRender 事件 (OnPreRender 方法)
  
八. 保存视图状态 - SaveViewState 方法

九. 呈现 - Render 方法

十. 处置 - Dispose 方法

十一. 卸载 - UnLoad 事件 (OnUnLoad 方法)

Web Form 的基类 System.Web.UI.Page 从 System.Web.UI.Control 继承,它也是一种特殊的 Control
参考资料:
http://msdn2.microsoft.com/zh-cn/library/system.web.ui.ipostbackdatahandler_members(VS.80).aspx
http://blog.joycode.com/percyboy/archive/2004/08/22/31330.aspx
http://www.ccw.com.cn/htm/center/prog/02_3_12_2.asp
http://blog.csdn.net/vigorcsdn/archive/2006/01/07/572552.aspx

posted @ 2006-12-13 14:47  晓岚  阅读(1456)  评论(2编辑  收藏  举报