对于ASP.NET Webform的开发者,理解ASP.NET Webform的页面生命周期是非常重要的。主要是为了搞明白在哪里放置特定的方法和在何时设置各种页面属性。但是记忆和理解页面生命周期里提供的事件处理方法(method)非常困难,即使一时记住了但是过一段时间不看可能又忘了。网上有很多关于页面生命周期内部机制的文章,所以本文只准备简单覆盖技术的基础部分,更主要的目的是给大家提供一个简单得记忆页面生命周期的方法。准确的记忆ASP.NET页面生命周期每一个阶段发生了什么事情是比较困难的,一种便于记忆的方法是根据各个阶段的名字组合出一个缩写。微软的文档给出的ASP.NET生命周期如下:

Page Request 
Start 
Page Initialization 
Load 
Validation 
Postback event handling 
Rendering 
Unload 
根据这个组合出一个缩写非常容易。既然Page Request技术上并不是页面生命周期的一部分(这个阶段仅仅标示我们是否开始一个页面周期或者从缓存加载一个页面),我们为了方便,就不包括这一阶段。

S – Start 
I – Initialize 
L – Load 
V – Validate 
E – Event Handling 
R – Render

这样就组合出一个缩写“SILVER',这个英文单词非常好记。当然,一定要记住页面生命周期的最后一个环节unload没有包括在里面。如果你觉得有必要,你可以记忆为“SILVER-U”或者“SILVER-YOU",尽管有点破坏这个记忆法的完美性。现在,我们非常容易就记住了页面生命周期,接着我们总结一下每一步都发生了什么,都有什么事件伴随着发生。

1. Start

在这个阶段,页面属性,比如Request, Response, IsPostBack和UICulture被创建。最为一个开发人员,大部分时候在这个阶段你不需要做任何事。 如果你需要调用或者重写(override)这一阶段的行为,可以使用PreInit方法创建或者重新创建动态控件,设置master page或者theme或者读取和设置profile property的值。要注意的一点是,如果是回传(postback)的页面请求,所有控件的值还没有从view state里还原,如果你在这个阶段设置一个控件的值,这个值有可能在下面的阶段被重写并覆盖。

2. Initialize
这个阶段对于开发人员是很重要。在这个阶段,theme被应用,所有的控件都被设置了唯一的ID。开发人员在这个阶段可以调用Init, InitComplete和PreLoad 方法。微软关于这些方法使用的建议如下:

Init – 这个事件发生在所有控件被初始化并且皮肤设置也被应用后。使用这个事件来读取控件的初始化值。 
InitComplete –这个事件被Page对象触发,使用这个事件处理那些要求所有初始化工作都完成后才能做的事情。

PreLoad - 如果在页面或者控件进入Load事件前你有什么要处理的,使用这个事件。Page在触发这个事件后,Page就会为自己和所有的控件加载view state并且处理所有Request中的postback数据。

3. Load

这个阶段可能是开发者使用得最多的一个阶段。在这个阶段,所有的控件被viewstate中信息填充并被加载,OnLoad事件被触发。在这个阶段你可以为页面上所有的服务端控件设置属性,得到query strings,建立数据库连接。

4. Validation

如果你的控件要求验证,验证会在这个阶段发生,这个时候你可以检查控件的IsValid属性。跟这个阶段关联的事件是Validate,它有一个可以接受验证字符串群的重载方法(overload method),这个重载方法执行特定控件群的验证。

5. Event Handling
所有服务器端控件的事件处理发生在这个阶段。也就是说Click, SelectedIndexChanged等等这些事件会应用到你的服务器端控件,如果是页面请求是回传(postback)的话,这些事件的处理函数就会被控件触发。这个阶段可以使用的事件如下:

LoadComplete – 在这个阶段,页面上所有的控件加载完毕。 
PreRender – 这里有几个重点,第一:页面对象(page object)会调用每一个控件的EnsureChildControls函数,并最终调用自己的。其次:所有具有DataSourceID的数据绑定控件都会调用自己的DataBind函数。要注意的一点是,PreRender事件会发生在一个页面的每一个控件上。在这个事件的最后,页面和所有控件的ViewState被存储。

SaveStateComplete – 到这里,ViewState已经存储完毕,如果你有什么操作不需要修改控件但需要修改ViewState的,可以放在SaveStateComplete里面。

6. Render

渲染(Render)实际上不是一个事件,页面对象调用每一个控件的Render方法从而按顺序的输出控件的HTML代码。编写用户自定义控件的开发者对这个阶段最感兴趣了,因为输出用户自定义HTML代码的标准做法就是重写Render方法。如果你的控件是从ASP.NET服务器端控件继承来的,你也许不需要重写Render方法,除非你想呈现一个与用户控件默认行为不同的行为。这些都超出这个文档要讨论的范围了,如果想了解更多,请参考Microsoft's Developing Custom ASP.NET Server Controls. (http://msdn2.microsoft./zt27com/en-us/librarytfhy.aspx)

7. Unload

最后这个事件首先是被各个控件逐一触发,最后被页面触发。在这个时刻,所有的控件已经被渲染为输出流(output stream)并且无法被修改。这个阶段中,任何试图对response stream的操作都会引发异常。这个事件主要用于做一些清理工作,比如关闭数据库连接和打开的文件或者登记事件记录等等其它任务。

页面周期中都有哪些方法
下面列出ASP.NET页面生命周期中所有的方法,这些方法都可以被重写(override),要注意的是这些方法有的会递归调用,有个会被页面中的内容重复调用,这个列表是按照页面加载时最通用的顺序排列的。

Construct 
ProcessRequest 
FrameworkInitialize 
InitializeCulture 
If child controls are present: 
AddParsedSubObject 
CreateControlCollection 
AddedControl 
ResolveAdapter 
DeterminePostBackMode 
OnPreInit 
OnInit 
TrackViewState 
OnInitComplete 
OnPreLoad 
OnLoad 
OnLoadComplete 
EnsureChildControls 
CreateChildControls 
OnPreRender 
OnPreRenderComplete 
SaveViewState 
OnSaveStateComplete 
CreateHtmlTextWriter 
RenderControl 
Render 
RenderChildren 
VerifyRenderingInServerForm 
OnUnload 
Dispose

结论

在开发ASP.NET程序时,了解什么时候发生什么事情是非常重要的。理解页面中事件是如何层层展开节省大量挠头和查错的时间。当这些页面周期中的事件难以记住时,我希望这个使用的法子能帮助你梳理出在程序里哪个地方需要做什么处理。

原文链接:http://www.lanhusoft.com/Article/85.html

转载于:https://www.cnblogs.com/yige/p/4942761.html

(转)教你记住ASP.NET WebForm页面的生命周期相关推荐

  1. Asp.net2.0页面的生命周期(续)

    以上就是Asp.net页面生命周期中的几个主要事件.每次我们请求一个Asp.net页面时,我们都经历着同样的过程:从初始化对象到销毁对象.通过了解Asp.net页面的内部运行机制,我相信大家在编写.调 ...

  2. Asp.net2.0页面的生命周期

    当一个获取网页的请求(可能是通过用户提 交完成的,也可能是通过超链接完成的)被发送到Web服务器后,这个页面就会接着运行从创建到处理完成的一系列事件.在我们试图建立Asp.net页面的 时候,这个执行 ...

  3. 【转】Asp.net页面的生命周期

    介绍 Asp.net是微软.Net战略的一个组成部分.它相对以前的Asp有了很大的发展,引入了许多的新机制.本文就Asp.net页面的生命周期向大家做一个初步的介绍,以期能起到指导大家更好.更灵活地操 ...

  4. ZT Web Control 开发系列(一) 页面的生命周期

    http://www.cnblogs.com/joeliu/category/143125.html Page是WebForm编程基本元素,它从TemplateControl派生,而TemplateC ...

  5. HTML 页面的生命周期、HTML 事件

    From:https://blog.csdn.net/WuLex/article/details/101016936 1.页面生命周期 HTML页面的生命周期有以下三个重要事件,每个事件都有特定的用途 ...

  6. .Net页面的生命周期(ZZ)

    1.        初始化:主要是执行Page的Init事件和OnIint方法. 2.        加载视图状态:主要是执行LoadViewState方法,就是从ViewState中获取上一次的状态 ...

  7. 2011年9月19日 面试重点:asp.net运行原理和生命周期

    面试重点:asp.net运行原理和生命周期 1.ispostback回调机制 isPostBack=false !IsPostBack==ture 当前页面是第一次加载 IsPostBack 由于用户 ...

  8. WEB页面的生命周期,DOMContentLoaded,load,beforeunload,unload

    简言 理解WEB页面的生命周期,文档加载事件及顺序对WEB开发有十分的重要意义.如果不理解,在元素未加载就提前操作元素,则得不到想要的结果.而如果页面完全加载完成后,再进行操作,则又会影响用户体验. ...

  9. HTML页面的生命周期

    页面生命周期:DOMContentLoaded, load, beforeunload, unload HTML页面的生命周期有以下三个重要事件: DOMContentLoaded - 浏览器已经完全 ...

最新文章

  1. 干货 | BBR及其在实时音视频领域的应用
  2. C51 汇编 双层循环延时代码
  3. Git笔记(1) 版本控制
  4. 少样本学习系列(四)【元学习与少样本深层理解】
  5. linux下查找文件、排序、查看文件内容
  6. 5G工业路由器 物联网终端应用
  7. Google浏览器书签栏优化
  8. 丽博版魔都家居图鉴:如何住进《三十而已》的精致家
  9. 华为rh2288v2服务器系统,扩展能力强 华为RH2288H V2服务器解析
  10. 【项目实战】Java POI之Word导出经典案例一
  11. 附录H-2 技术预研报告
  12. 分布式查询工具-Apache Drill
  13. FastJson - JSONObject 如何设置成有序?(如:LinkedHashMap)
  14. 原来Oracle也不喜欢“蜀黍”
  15. 算法初步——冒泡排序
  16. smart原则_高效能宝宝养成记之七 SMART原则:梦想与空想只隔一个目标的距离
  17. 数据结构字符串模式匹配中计算next和nextval的值(C语言)
  18. 哈希表的构造及解决冲突
  19. 【人工智能专题】基于 GAN 的艺术风格化——图像风格迁移
  20. 美的不可控温小烤箱 MT10AH-AA 烤箱简易改造——15块钱增加控温系统

热门文章

  1. 编程语言对比 迭代器
  2. Eclipse Windows环境配置
  3. php图片滑动的属性,JavaScript_javascript图片滑动效果实现,本文为大家分享了javascript图片 - phpStudy...
  4. 通过options探测服务器信息,WEB服务器启用了OPTIONS方法
  5. 416亿元公有云市场:阿里173亿、腾讯50亿、华为35亿
  6. 企业的培训体系:145页企业培训年度规划和培训体系的建立
  7. 2019年,瑞云渲染做了这些事……
  8. 一步步实现SDDC-vSphere Auto Deploy的妙用
  9. vSAN其实很简单-vSAN禁得起折腾的吗?
  10. Windows ESXI 5.5 升級到 VCSA 6.5