您的位置:首页 > 编程语言 > ASP

ASP.NET 页面生存周期概览(转)

2011-11-13 22:21 267 查看
ASP.NET 页面运行时会通过生命周期来完成一系列的处理步骤。包括初始化,控件实例化,状态恢复和维护,运行事件处理代码,以及外观的呈现。了解页面生命周期是重要的,可以根据需要针对特定情景编写处理代码。另外,开发自定义控件也必须熟悉页面生命周期中正确的控件初始化指令,使用视图状态数据的控件属性,以及运行控件行为逻辑(控件的生命周期依赖于页面生命周期,因此页面会为控件引发比自己更多的事件)。

页面生命周期的一般情况

一般情况下,页面通过下表列出的情景大纲。除了页面生命周期情景之外,在请求开始和结束的时候还会发生除页面之外的应用程序情景。

情景描述
请求页面

页面请求发生在页面生命周期开始之前。当用户发送页面请求,ASP.NET 检测是否需要对页面进行处理或编译(页面生命周期由此开始),也可以直接用已缓存的页面作为回应。

开始

在该步骤中会设置页面的
Request
Response
属性。页面会根据请求是否回传或新建来设置
IsPostBack
属性。另外,在开始时,页面还会设置
UICulture
属性。

页面初始化

页面初始化时,页面控件会生效并为每个控件设置
UniqueID
属性。主题定义也被作用于页面。如果当前请求已回传,回传的数据并不会被读取,且视图状态也不保存任何控件的属性值。

读入

读入时,如果当前请求已回传,控件属性会从视图状态和控件状态中读入。

验证

验证时会调用所有验证器的
Validate
方法,并分别为页面中的验证器设置
IsValid
属性。

处理回传事件

如果请求已回传,将调用所有事件处理器。

呈现

页面呈现时会保存视图状态,并将所有控件输出通过
Response
OutputStream
对象进行呈现。

卸载

当页面完全呈现后调用,且发送到客户端。同时,页面的
Response
Request
属性也被卸载并清除。

生命周期事件

在每个页面生命周期情景下,可以对页面引发的事件编写自定义代码进行处理。至于控件事件,则通过绑定属性(如
OnClick
)或编写代码的方式进行事件处理器绑定。

页面也支持自动事件的触发,ASP.NET 会监视并在特定事件引发后自动运行这些有特定名称的事件。如果 @ 页面指令的
AutoEventWireup
参数设置成 true(默认值为 true),页面事件就会自动绑定到以“Page_事件”格式命名的方法(如
Page_Load
Page_Init
)。

下表列出部分页面生命周期中的常用事件。还有一些未被列出的原因是不常用,且主要用于 ASP.NET Web 页面对控件的初始化和呈现。除非编写自定义 ASP.NET 服务器控件,就需要了解这些情景。

页面事件典型用途
Page_PreInit


使用
IsPostBack
属性检测页面被回传还是第一次被请求。

创建或重建动态控件。

动态设置模板页。

动态设置
Theme
属性。

读取或设置档案属性。

注意:如果请求被回传,控件的值就不能从视图状态中恢复。在这个时候设置的控件属性,将会覆盖下一个情景中的值。

Page_Init


读取或初始化控件属性。

Page_Load


读取并更新控件属性。

控件事件

完成应用程序处理:

如果页面中包含验证器控件,则在进行任何操作之前先检查所有验证控件的
IsValid
属性。

处理指定事件(如
Button
控件的
Click
事件)。

Page_PreRender


完成页面控件的最后更改。

Page_Unload


完成最后的清除工作,其中包括:

关闭文件和数据库连接。

完成登入或其他请求任务。

注意:在卸载时,页面和控件都会重新呈现,可进一步对回应过程进行修改。如果尝试对
Response.Write
之类的方法进行,页面就会产生并抛出一个异常。

附加的页面生命周期考虑因素

请注意下列关于页面生命周期的附加信息:

与页面一样,每个 ASP.NET 服务器控件都拥有属于自已的生命周期。比如,控件的
Init
Load
方法会在相应的页面事件中得到调用。而页面控件的
Init
方法只能在页面
Init
方法之后调用。但是,页面的
Load
方法能够在控件
Load
方法之前被调用。

通过控件事件可以自定义控件的外观和内容。比如,所有控件都引发
Init
Load
Unload
等事件,尽管开发者并不经常处理这些事件。但在处理控件事件时却经常需要用到(如
Button
控件的
Click
事件和
ListBox
控件的
SelectedIndexChanged
事件)。在某些情况下还有可能处理控件的
DataBinding
DataBound
事件。

另外,在处理页面生命周期事件时,可以重载
Page
派生类的方法。比如,重载页面的
InitializeCulture
方法动态设置文化信息。创建以“Page_事件”格式命名的事件重载处理时,会先隐式调用基类的实现,因此不需要编写代码进行显式调用。比如,不管是否已经重载页面的
Page_Load
方法。ASP.NET 始终会自动调用页面基类的
OnLoad
方法。但是,使用
override
关键字重载页面的
OnLoad
方法时就需要显式调用基类的实现。比如,重载页面的
OnLoad
方法时必须编写
base.Load
(Visual Basic 的写法是
MyBase.Load
)来明确地运行基类的实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: