首页 / 网页编程 / ASP.NET / 记不住ASP.NET页面生命周期的苦恼
记不住ASP.NET页面生命周期的苦恼2011-07-26 MSDN 陆地介绍对于ASP.NET开发者,理解ASP.NET的页面生命周期是非常重要的。主要是为了搞明白在哪里放置特定 的方法和在何时设置各种页面属性。但是记忆和理解页面生命周期里提供的事件处理方法(method)非常困 难。互联网上有很多关于页面生命周期内部机制的文章,所以本文只准备简单覆盖技术的基础部分,更主 要的目的是给大家提供一个简单得记忆页面生命周期的方法。准确的记忆ASP.NET页面生命周期每一个阶段发生了什么事情是比较困难的,一种便于记忆的方法是根 据各个阶段的名字组合出一个缩写。微软的文档给出的ASP.NET生命周期如下:Page RequestStartPage InitializationLoadValidationPostback event handlingRenderingUnload根据这个组合出一个缩写非常容易。既然Page Request技术上并不是页面生命周期的一部分(这个阶 段仅仅标示我们是否开始一个页面周期或者从缓存加载一个页面),我们为了方便,就不包括这一阶段。S – StartI – InitializeL – LoadV – ValidateE – Event HandlingR – 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数据。