自定义服务器控件也有自己的生命周期,它与页面生命周期几乎经历着同样的生命同期过程,比如OnInit事件它发生在页面OnInit事件之前,控件的Load事件发生在页面Load事件之后,PreRender事件发生在页面PreRender事件之后
Render事件发生在页面Render事件之后,Unload事件发生在页面Unload事件之前,总之,它也分为6个阶段:
1.初始化
2.加载
3.事件处理
4.验证
5.呈现
6.卸载
A.初始化阶段的事件包括PreInit与Init事件,InitCompleted事件它们分别对应页面方法OnPreInit(),OnInit(),OnInitCompleted()方法.其中PreInit事件与InitCompleted事件是Page对象特有,其中页面的方法还有Construct()(构造函数),ProcessRequest()方法
InitializeCulture()方法(初始化文化信息)TrackViewState()(跟踪视图状态,使得架构能记录ViewState的状态更改,这个方法调用发生在Init事件与InitCompleted事件之间,PreInit事件一般用来设置主控页,Theme主题属性,设置IsPostBack,UICultrue属性,读取或设置配置文件属性值.Init事件发生在所有控件已初始化且已应用所有外观设置后引后。使用此事件来初始化控件属性
B.页面为自身和控件加载视图状态(如果页面上设置了属性EnableViewState为false,则不加载视图状态,一般视图状态放在一个隐藏控件中传送)-》页面调用OnPreLoad()方法引发PreLoad事件-》引发Load事件--》递归调用页面中的子控件的OnLoad()方法,引发LOad事件,Page类的OnLoad()方法会自动的调用,但如果你重写了OnLoad()方法则要显示的调用它base.OnLoad(e);
C.事件处理(RaisePostBackEvent)这个是引起回发事件,能够处理回发的控件必须实现System.web.UI.IPostbackDataHandler接口,此接口允许控件确定是否在回发改变后其状态以及引发相应的事件,它有两个方法public bool LoadPostData(String postDataKey,NameValueCollection collection);public void RaisePostChangedEvent();如果LoadPostData方法返回True,则页面框架在跟踪此控件时发现返回True ,则调用RaisePostChangedEvent()方法,该方法引发更改事件TextChanged事件,TextChanged事件在页面中可能订阅事件处理程序(OnTextChanged="Text_Changed")从而引发事件.
D.验证(Validate)验证发生在装载与页面事件之后,因此在此之前如果要验证数据有效性,必须用到IsValidate属性
E.呈现页面中的OnLoadComplete()方法引发LoadCompleted事件,OnPreRender方法引发preRender事件-->控件DataBind()方法-->调用OnDataBind()方法-->引发数据绑定事件-->OnPreRenderCompleted()引发PreRenderComplete事件-->SaveViewState()保存视图状态与控件状态-->OnSaveStateComplete()方法引发SaveStateComplete事件-->RendControl()-->Render()-->RenderChildren()
F.卸载OnUnload()引发unload事件-->dispose()
ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤。这些步骤包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现。了解页生命周期非常重要,因为这样做您就能在生命周期的合适阶段编写代码,以达到预期效果。
如果您要开发自定义控件,就必须熟悉页生命周期,以便正确进行控件初始化,使用视图状态数据填充控件属性以及运行控件行为代码。控件的生命周期基于页的生命周期,但是页引发许多您需要在自定义控件中处理的事件。
本主题包含以下各节:
一般来说,页要经历下表概述的各个阶段。除了页生命周期阶段以外,在请求前后还存在应用程序阶段,但是这些阶段并不特定于页。有关更多信息,请参见 Introduction to the ASP.NET Application Life Cycle and IIS 7.0 的 ASP.NET 应用程序生命周期概述(ASP.NET 应用程序生命周期简介)。
生命周期的某些部分仅当页处理为回发时才出现。对于回发,部分页回发过程中(当您使用 UpdatePanel 控件)与整页回发过程中的页生命周期是一样。
阶段 |
说明 |
---|---|
页请求 |
页请求发生在页生命周期开始之前。用户请求页时,ASP.NET 将确定是否需要分析和编译页(从而开始页的生命周期),或者是否可以在不运行页的情况下发送页的缓存版本以进行响应。 |
启动 |
在启动阶段,将设置页属性,如 Request 和 Response。在此阶段,页还将确定请求是回发请求还是新请求,并设置 IsPostBack 属性。页还设置 UICulture 属性。 |
初始化 |
页初始化期间,可以使用页中的控件,并将设置每个控件的 UniqueID 属性。如果需要,还会向页应用于母版页和主题。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。 |
加载 |
加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性。 |
回发事件处理 |
如果请求是回发请求,则将调用控件事件处理程序。之后,将调用所有验证程序控件的 Validate 方法,此方法将设置各个验证程序控件和页的 IsValid 属性。 |
呈现 |
在呈现之前,会针对该页和所有控件保存视图状态。在呈现阶段中,页会针对每个控件调用 Render 方法,它会提供一个文本编写器,用于将控件的输出写入页的 Response 属性的 OutputStream 对象中。 |
卸载 |
完全呈现页并已将页发送至客户端、准备丢弃该页后,将引发 Unload 事件。此时,将卸载页属性(如 Response 和 Request)并执行清理。 |