【页】生命周期与【服务器控件】生命周期有什么区别啊?

TianYi3G2013 2013-12-06 12:30:58
ASP.NET 页生命周期概述
http://msdn.microsoft.com/zh-cn/library/ms178472.aspx


页生命周期概述
一般来说,页要经历下表概述的各个阶段。 除了页生命周期阶段以外,在请求前后还存在应用程序阶段,但是这些阶段并不特定于页。 有关更多信息,请参见 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)并执行清理。





服务器控件生命周期

(1)初始化----在此阶段中,主要完成两项工作:一、初始化在传入Web请求生命周期内所需的设置;二、跟踪视图状态。首先,页面框架通过默认方式引发Init事件,并调用OnInit()方法,控件开发人员可以重写该方法为控件提供初始化逻辑。此后,页面框架将调用TrackViewState方法来跟踪视图状态。需要注意的是:多数情况下,Control基类提供的TrackViewState方法实现已经足够了。只有在控件定义了复杂属性时,开发人员才可能需要重写TrackViewState方法。

  (2)加载视图状态----此阶段的主要任务是检查服务器控件是否存在以及是否需要将其状态恢复到它在处理之前的请求结束的状态。因此该过程发生在页面回传过程中,而不是初始化请求过程。在此阶段,页面框架将自动恢复ViewState字典。如果服务器控件不维持其状态,或者它有能力通过默认方式保存其所有状态而使用ViewState字典,那么开发人员则不必实现任何逻辑。针对那些无法在ViewState字典中存储的数据类型或者需要自定义状态管理的情况,开发人员可以通过重写LoadViewState方法来自定义状态的恢复和管理。

  (3)处理回发数据----若要使控件能够检查客户端发回的窗体数据,那么必须实现System.Web.UI.IPostBackDataHandler接口的 LoadPostData()方法。因此只有处理回发数据的控件参与此阶段。

  (4)加载----至此阶段开始,控件树中的服务器控件已创建并初始化、状态已还原并且窗体控件反映了客户端的数据。此时,开发人员可以通过重写OnLoad()方法来实现每个请求共同的逻辑。

  (5)发送回发更改通知----在此阶段,服务器控件通过引发事件作为一种信号,表明由于回发而发生的控件状态变化(因此该阶段仅用于回发过程)。为了建立这种信号,开发人员必须再次使用System.Web.UI.IPostBackDataHandler接口,并实现另一方法-RaisePostBackChangedEvent()。其判断过程为:如果控件状态因回发而更改,则LoadPostData()返回true;否则返回false。页面框架跟踪所有返回true的控件并在这些控件上调用RaisePostDataChangedEvent()。

  (6)处理回发事件----该阶段处理引起回发的客户端事件。为了便于将客户端事件映射到服务器端事件上进行处理,开发人员在此阶段可以通过实现System.Web.UI.IPostBackEventHandler接口的RaisePostBackEvent()方法来实现该逻辑。由此途径,服务器控件将成功捕获回发的客户端事件进行服务器端的相应处理。

  (7)预呈现----该阶段完成在生成控件之前所需要的任何工作。通常情况下是通过重写OnPreRender()方法完成该工作。需要注意的是:在该阶段,可以保存在预呈现阶段对控件状态所做的更改,而在呈现阶段进行的更改则会丢失。

  (8)保存状态----如果服务器控件不维持状态,或者它有能力通过默认方式保存其所有状态而使用ViewState字典,那么开发人员不必在该阶段实现任何逻辑。因为这个保存状态的过程是自动的。如果服务器控件需要自定义状态保存,或者控件无法在ViewState字典中存储特殊的数据类型,则需要通过重写SaveViewState()方法来实现状态保存。

  (9)呈现----表示向HTTP输出流中写入标记文本的过程。开发人员通过重写Render()方法使其在输出流上自定义标记文本。

  (10)处置----在此阶段中,通过重写Dispose ()方法完成释放对昂贵资源的引用,如数据库链接等。

  (11)卸载----完成的工作与"处置"阶段相同,但是,开发人员通常在Dispose()方法中执行清除,而不处理Unload事件。




=======================================================================
1.是一回事?错误观点,?请指出,

2.一个是整体,一个是局部的关系。

3.服务器控件周期包含在周期中?

4.页关注的一整个流程,从客户端请求页开始,到服务器完整返回HTML代码到客户端
而服务器控件关注的是从初始化到卸载。


请各位帮忙分析一下~谢谢!


...全文
133 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
普通的服务器控件,可能被Add到其他服务器控件(包括页面)的Controls集合中。这个时候,它会根据当前页面执行的步骤,例如页面已经执行到第5步那么这个控件也会执行到第5步;例如页面执行到第3部那么这个控件也会执行到第3步。这是向Controls加入动态页面时,其它服务器控件与页面控件的区别。
  • 打赏
  • 举报
回复
asp.net页面就是一个服务器控件。
TianYi3G2013 2013-12-08
  • 打赏
  • 举报
回复
为啥大伙儿都不参与这个讨论的呢?
TianYi3G2013 2013-12-06
  • 打赏
  • 举报
回复
服务器控件的生命周期_woodsming_新浪博客 http://blog.sina.com.cn/s/blog_4464cad20100kmlh.html

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧