页面生命周期

原创 2007年09月24日 10:16:00
服务器控件生命周期简介

  服务器控件的生命周期是创建服务器控件最重要的概念。作为开发人员,必须对服务器控件生命周期深刻理解。当然,这不是一朝一夕就可以做到的。对于学习控件开发技术的初学者,可以不必掌握得非常详细深入,只需对服务器控件的生命周期中的不同阶段有一个大致的了解即可。

   在掌握服务器控件生命周期的过程中,读者要特别注意有关服务器控件状态的相关内容。在重点了解生命周期各个阶段的同时,对服务器控件的状态变化要注意以 下问题:控件的生命周期何时保存控件和恢复其状态;何时与页面及其他控件之间进行交互;何时执行重要的处理逻辑;在各个阶段,控件可使用哪些信息、保持哪 些数据、控件呈现时处于哪种状态以及何时输出显示标记文本等。如下列举了服务器控件生命周期所要经历的11个阶段。

  (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事件。

  小结

   服务器控件在ASP.NET 2.0框架中起着举足轻重的作用,是构建Web应用程序最关键、最重要的组成元素。对于一个优秀的开发人员,掌握服务器控件的基础知识是非常重要的。本文 就服务器控件的概念、类型、生命周期等关键内容进行了介绍。希望读者能够将这些内容牢固掌握,为写出精彩的服务器控件打下良好的基础。

 
 

asp.net web 页面生命周期

每次客户端请求都会创建页面实例,它的执行使自身及其包含的控件经历页面生命周期的各个阶段。页面的执行起始于HTTP运行库调用ProcessRequest时,该方法将启动页面并控制它的生命周期。生命周期由...
  • lqh4188
  • lqh4188
  • 2013年01月23日 15:06
  • 2037

WebForm页面生命周期及asp.net运行机制

 1.先上几张原理图着重理解:          现在针对第四副图原理进行解析: 流程: 1.浏览器发送请求 2.服务器软件(IIS)接收,它最终的目的就是为了向...
  • mss359681091
  • mss359681091
  • 2016年07月11日 17:36
  • 1793

Ionic页面的生命周期

官方文档 如官网文档所示,常用的生命周期有如下6个: Event Desc ionViewDidLoad 当页面加载的时候触发,仅在页面创建的时候触发一次,如果被缓存...
  • wei11556
  • wei11556
  • 2017年02月22日 14:23
  • 8977

详解ASP.NET MVC的请求生命周期

本文的目的旨在详细描述ASP.NET MVC请求从开始到结束的每一个过程。我希望能理解在浏览器输入URL并敲击回车来请求一个ASP.NET MVC网站的页面之后发生的任何事情。 为什么需要关心这...
  • edison0621
  • edison0621
  • 2014年06月30日 09:38
  • 3383

微信小程序把玩(五)页面生命周期

这里只要熟悉页面的基本生命周期即可,业务在指定生命周期函数内书写。以下是官网给出的生命周期函数方法和状态图 上面的生周期函数图对于做Android 或者IOS的来书理解起来应该不是难事,具体怎么掌握只...
  • u014360817
  • u014360817
  • 2016年09月24日 15:40
  • 14941

JSF生命周期的6个阶段

1 重建视图: 建议组件树,如果是首次渲染,则组件树被重置合适的状态;如果是首次渲染,则   组件树被创建跳到响应阶段。 2 应用请求值: 树中的每个组件都能从请求参数中提取的新的值,并把值存储本地....
  • amwiacel
  • amwiacel
  • 2013年11月07日 14:56
  • 2188

JSP的结构和生命周期

1.JSP的结构 网络服务器需要一个JSP引擎,也就是一个容器来处理JSP页面。容器负责截获对JSP页面的请求。JSP容器和Web服务器协同合作,为JSP的正常运行提供必要的运行环境和其它服务,并且...
  • u012877472
  • u012877472
  • 2016年02月05日 12:28
  • 4535

ASP.NET生命周期详解

最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多处理流程,如管道事件等...
  • sundacheng1989
  • sundacheng1989
  • 2013年08月28日 19:18
  • 11753

UIViewController生命周期及应用界面切换

一、UIViewController生命周期iOS应用程序有本生的生命周期外,界面中UIViewController也有生命周期,其生命周期如下图所示:上图中,给出了一个视图控制器的视图可能发生的状态...
  • pop_xiaohao
  • pop_xiaohao
  • 2015年09月14日 14:30
  • 814

android Activity A和B互相跳转 生命周期的变化

前提概要此题出自笔者网上看到的一道面试题,原题如下:Activity A 跳转到 Activity B,生命周期的执行过程是啥? 虽然笔者专门花时间了解过Activity生命周期以及启动模式等等,但是...
  • Double2hao
  • Double2hao
  • 2016年10月25日 15:22
  • 3997
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:页面生命周期
举报原因:
原因补充:

(最多只允许输入30个字)