ASP.NET2.0的页生命周期

    页的事件要比控件的事件多,更加丰富。需要注意:①控件的Init事件发生在页的Init事件之前;②控件的Load事件发生在页的Load事件之后;③控件的PreRender事件发生在页的PreRender事件之后;④控件的Unload事件发生在页的Unload事件之前。⑤页和控件的回发请求的事件在各个控件的Load之后发生,如:Button控件的Click事件;⑥在页和控件的回发请求事件调用之前,会进行验证,并自动为页的“IsValid”赋值;⑦数据绑定发生在各个控件的PreRender事件之后。

 

下表给出了整个页生命周期的各个阶段,以及发生的顺序:

2 整个页生命周期的各个阶段及发生顺序

阶段

说明

用户可否访问

/控件事件

页请求

页请求发生在页生命周期开始之前。用户请求页时,ASP.NET 将确定是否需要分析和编译页(从而开始页的生命周期),或者是否可以在不运行页的情况下发送页的缓存版本以进行响应。

不可以

 

开始

在开始阶段,将设置页属性,如 Request Response。在此阶段,页还将确定请求是回发请求还是新请求,并设置 IsPostBack 属性。此外,在开始阶段期间,还将设置页的 UICulture 属性。

不可以

 

页初始化

页初始化期间,可以使用页中的控件,并将设置每个控件的 UniqueID 属性。此外,任何主题都将应用于页。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。

可以

Page_PreInit

Page_Init

Page_InitComplete

加载

加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性。

可以

Page_PreLoad

Page_Load

Page_LoadComplete

验证

在验证期间,将调用所有验证程序控件的 Validate 方法,此方法将设置各个验证程序控件和页的 IsValid 属性。

不可以

 

回发事件处理

如果请求是回发请求,则将调用所有事件处理程序。

可以

Control PostBack Events

预呈现

做呈现前的最后准备工作,如绑定数据源数据到数据绑定控件上。

可以

Page_PreRender

Page_PreRenderComplete

Page_SaveStateComplete

呈现

在呈现期间,视图状态将被保存到页,然后页将调用每个控件,以将其呈现的输出提供给页的 Response 属性的 OutputStream

不可以

 

卸载

完全呈现页、将页发送至客户端并准备丢弃时,将调用卸载。此时,将卸载页属性(如 Response Request)并执行清理。

可以

Page_Unload

在这里要说明几个问题:①呈现(Render)是指将页面和控件转换成Html的过程;②在页生命周期的所有阶段中“页请求”、“开始”、“验证”和“呈现”几个阶段,我们是无法通过页或控件的事件来访问和进行控制的。

那么我们又是如何通过事件方法来获取或者改变在各个阶段页和控件的属性值的呢?微软给出了以下的建议:

3 页事件及典型使用

页事件

典型使用

Page_PreInit

·                        使用 IsPostBack 属性确定是否是第一次处理该页。

·                        创建或重新创建动态控件。

·                        动态设置主控页。

·                        动态设置 Theme 属性。

·                        读取或设置配置文件属性值。

注意

如果请求是回发请求,则控件的值尚未从视图状态还原。如果在此阶段设置控件属性,则其值可能会在下一阶段被改写。

·                       

Page_Init

·                        读取或初始化控件属性。

Page_Load

·                        读取和更新控件属性。

Control events

执行特定于应用程序的处理:

·                        如果页包含验证程序控件,请在执行任何处理之前检查页和各个验证控件的 IsValid 属性。

·                        处理特定事件,如 Button 控件的 Click 事件。

Page_PreRender

·                        对页的内容进行最后更改。

Page_Unload

执行最后的清理工作,可能包括:

·                        关闭打开的文件和数据库连接。

·                        完成日志记录或其他特定于请求的任务。

注意

在卸载阶段,页及其控件已被呈现,因此无法对响应流做进一步更改。如果尝试调用方法(如 Response.Write 方法),则该页将引发异常。

·                       

我们在微软建议的基础上给出几个关键点和自己的编程建议:

4 页事件的关键点与编程建议

页事件

关键点

建议

Page_PreInit

1IsPostBack已经被赋予正确值。

2)静态视图状态已经被恢复。

动态设置页主题。

Page_PreLoad

1)动态视图状态已经被恢复。

根据自己的需要和数据,初始化页面控件。这包括三种情况:只在初次请求需要初始化的;只在回发请求需要初始化的;每次请求需要初始化的。

Page_SaveStateComplete

1)完成了视图状态的保存。

最后一个可以改变控件属性的事件。

 

 

至此,我们基本上了解了和页生命周期相关的主要内容,我们将对其的了解,总结成如下的编程建议:

①       将所有用户控件的自定义属性使用代码12中的视图状态方式加以处理。

②       对于页面来说,对要初始化的工作放在“Page_PreLoad”或“Page_Load”事件中,并使用以下的代码形式:

代码 13 初始化代码

代码
protected void Page_Load(object sender, EventArgs e)

{

// 放置每次请求都需要初始化的代码

if(!IsPostBack)

{

// 放置只在初次请求期间需要初始化的代码

}

else

{

// 放置只在回发请求期间需要初始化的代码

}

// 放置每次请求都需要初始化的代码

}

 ③    而对页面控件属性的设置,最好放在“Page_LoadComplete”、“Page_PreRender”、“Page_PreRenderComplete”中 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shadow_gz/archive/2007/11/30/1909687.aspx

posted @ 2010-04-15 17:15  哭过的天空  阅读(444)  评论(0编辑  收藏  举报