NET 页面生命周期
对于
ASP.NET
开发者,理解
ASP.NET
的页面生命周期是非常重要的。主要是为了搞明白在哪里放置特
定的方法和在何时设置各种页面属性。但是记忆和理解页面生命周期里提供的事件处理方法
(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
或者读取和设置
pr
ofile
property
的值。要注意的一点是,如果是回传
(postback)
的页面请求,所有控件的值还没有从
vie
w state
里还原,如果你在这个阶段设置一个控件的值,这个值有可能在下面的阶段被重写并覆盖
2.
Initialize
这个阶段对于开发人员是很重要。在这个阶段,
them
e
被应用,所有的控件都被设置了唯一的
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)
会调用每一个控件的
EnsureChildCont
rols
函数,并最终调用自己的。其次:所有具有
DataSourceID
的数据绑定控件都会调用自己的
DataBi
nd
函数。要注意的一点是,
PreRender
事件会发生在一个页面的每一个控件上。在这个事件的最后,页
面和所有控件的
ViewState
被存储。
SaveStateComplete
–
到这里,
ViewState
已经存储完毕,如果你有什么操作不需要修改控件但需要
修改
ViewState
的,可以放在
SaveStateComplete
里面。
6.
Render
渲染
(Render)
实际上不是一个事件,
页面对象调用每一个控件的
Render
方法从而按顺序的输出控件的
H
TML
代码。
编写用户自定义控件的开发者对这个阶段最感兴趣了,
因为输出用户自定义
HTML
代码的标准
做法就是重写
Render
方法。
如果你的控件是从
ASP.NET
服务器端控件继承来的,
你也许不需要重写
Re
nder
方法,
除非你想呈现一个与用户控件默认行为不同的行为。
这些都超出这个文档要讨论的范围了,
如
果想了解更多,
请参考
Microsoft's
Developing Custom
ASP.NET
Server
Controls.
(
http://ms
dn2.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
程序时,了解什么时候发生什么事情是非常重要的。理解页面中事件是如何层层展开节
省大量挠头和查错的时间。当这些页面周期中的事件难以记住时,我希望这个使用的法子能帮助你梳理出
在程序里哪个地方需要做什么处理。
我写这篇文章是为了帮助大家,也方便了自己。即使是熟练的开发人员有时也会忘记那些先那些后。这篇
文章不是面面俱到,而是希望给初学者和中级水平的开发者提供一些
“
小技巧
”
,从而帮助他们避免一些基
本的错误
NET 页面生命周期相关推荐
- [转]ASP.NET页面生命周期描述
ASP.NET页面生命周期描述 vigorID:Vigorcsdn 在以前写个一篇关于ASP.NET页面生命周期的草稿,最近又看了看ASP.NET,做个补充,看看页面初始过程到底是怎么样的 下面是AS ...
- WebForm页面生命周期及asp.net运行机制
转载至:https://www.cnblogs.com/liangxiaofeng/p/5620033.html 1.先上几张原理图着重理解: 现在针对第四副图原理进行解析: 流程: 1.浏览器发送请 ...
- ASP.NET页面生命周期描述
附一篇文章:http://blog.csdn.net/Vigorcsdn/article/details/572552 在以前写个一篇关于ASP.NET页面生命周期的草稿,最近又看了看ASP.NET, ...
- 【Flutter】Flutter 页面生命周期 ( 初始化期 | createState | initState | 更新期 | build | 销毁期 | dispose)
文章目录 一.Flutter 页面生命周期 1.StatelessWidget 组件生命周期函数 2.StatefulWidget 组件生命周期函数 二.StatefulWidget 组件生命周期 1 ...
- Asp.Net页面生命周期(多图)
抽空用viso画了请求处理模型图 1.浏览器实际上是一个Socket客户端,它向服务器发送请求报文 2.请求报文被封装为http请求,通过socket发送到IIS服务器 3.内核模式包含一个Http. ...
- ASP.NET页面生命周期与应用程序生命周期
页面生命周期 页面生命周期执行一系列步骤:页面的初始化.实例化控件.还原和维护状态.运行事件处理程序代码.呈现.为了在合适的阶段执行所需的代码,所以要对页面生命周期非常熟悉.在页生命周期的各个阶段,页 ...
- 页面生命周期:DOMContentLoaded, load, beforeunload, unload
页面生命周期:DOMContentLoaded, load, beforeunload, unload 原文地址:http://javascript.info/onload... HTML页面的生命周 ...
- ASP.NET页面揭秘之页面生命周期
首先简单介绍下Page类. 在.NET Framework中,Page类提供了ASP.NET应用程序从.aspx文件开始创建的所有对象的基本行为.Page类在System.Web.UI命名空间中定义, ...
- 页面生命周期_微信小程序的生命周期学习笔记-应用篇
在我们学习微信小程序的过程当中,我们会参考很多资料.在这些资料中,我们经常能够看到"生命周期"四个字,在前面的课程中也提到过.在这里做一个说明. 生命周期是一类函数的统称,这些函数 ...
- 记不住ASP.NET页面生命周期的苦恼
介绍 对于ASP.NET开发者,理解ASP.NET的页面生命周期是非常重要的.主要是为了搞明白在哪里放置特定的方法和在何时设置各种页面属性.但是记忆和理解页面生命周期里提供的事件处理方法(method ...
最新文章
- android 学习随笔十二(网络:使用异步HttpClient框架)
- Blockquotes,引用,html里面,经常用到的一个!
- 淘宝山寨IOS sdk
- JEECG Word模板导出教程
- 求合作开发伙伴 .NET 中高级工程师 1-2名
- 小课堂 | 你听过雾计算?对了,还有霾计算
- HDFS上大文件如何切分?
- FIFO设计中的注意问题与技巧
- 每日学习笔记(12)
- MIMO Radar
- 简单概括HAPI(Houdini Engine API)所涵盖的功能
- **RAKsmart服务器租用相对其他美国服务器的优势**
- 短链接生成器,adf.ly、shorte.st、ouo.io、adfoc.us哪个更好,有哪些区别
- Google Filament引擎编译记录
- JIT - 即时编译
- SpaceX火箭数据 API 开源,支持 Python
- 学习进销存管理系统知识
- mysql安装 解压版
- 转载 | 万字深度解析 NFT 借贷市场
- 嵌入式linux dlna,基于嵌入式Linux的家用蓝光播放机上DLNA功能的实现
热门文章
- 适合平板用的Android版本,安卓平板专享 推荐五款Pad版应用浏览器
- NLP学习笔记——情感分析一 (简介)
- 《格鲁夫给经理人的第一课》--读书笔记
- MinIO 中的图片在前端列表渲染时报错 404
- 利用Olami SDK 实现语音控制计算器(iOS)
- iPad谷歌浏览器怎么开摄像头_谷歌浏览器书签栏怎么显示_谷歌浏览器显示书签栏步骤...
- openlayers官方教程(三)Basics——Zooming to your location
- 使用java实现路由协议_如果使用OSPF作为路由协议,那么( )【选两项】
- HTML 5 音频与视频标签
- 最新前端开发面试笔试题及答案---图片(面试题系列持续更新中)(4)