asp.net page 生命周期事件-1

本文我们将会讨论asp.net page 生命周期事件,在网上一搜发现一大堆,但是只是给出了顺序,然而本文根据asp.net高级编程中的资料,对其顺序,事件的描述、用法作出一些简单的总结,希望可以帮助到想要了解asp.net page 生命周期的读者。

一个asp.net web应用生命周期可以分为三个level:

1. 应用程序(application) level(例如---global.asax中的Session_Start 事件)

2. Page 或者 webform level(例如--Page_Load)

3. control level( 例如--下拉列表的Selected index chaged 事件)

温馨提示:control level会在下一篇文章中讨论

我们都知道网页应用都是基于无状态协议的。对于webform的每次请求,事件都会按照下面的顺序发生

1.web application 创建一个webform请求实例

2.处理webform的事件

3.生成HTML代码,并且把html响应给请求客户端

4.webform销毁,释放内存

下面是一些常用的asp.net webform生命周期中的事件,除了error 事件,其他事件按顺序触发,因为error 事件仅仅会发生异常,并且异常没被处理时触发。

Preinit - 就如事件名称表示,发生在页面开始初始化。IsPostBack,IsCallback,IsCrossPagePostBack 等属性就是在这阶段设置的。我们通常可以在这里动态设置master page和网页主题。所以Preinit 经常被用于一些动态控制。

Init - 页面初始化 ,在web窗体上的控件的init 事件后触发,可以使用这个事件来读取或者初始化控件的属性。服务器控件会根据web窗体中 view state来初始化。因此viewstate会在这事件中重新被保存。

InitComplete - 事件在页面初始化完成后触发

PreLoad - 触发在Page Load事件之前

Load - Page Load事件,发生在web窗体控件的load事件之前

Control Events - 在 Page load 事件之后, 按钮点击、下拉框index改变等事件

Load Complete - 当控制事件(Control Events)被处理后,这事件会被调用

PreRender - 在渲染网页之前触发

PreRenderComplete - 仅仅跟着PreRender 完成后触发

Unload - 在这阶段释放内存

Error - 如果发生未被捕获的异常,这事件会被触发


为了看清楚事件的执行顺序,创建了一个asp.net项目,然后写了如下代码:

protected void Page_PreInit(object sender, EventArgs e)
{ Response.Write("Page_PreInit" + "
"); } protected void Page_Init(object sender, EventArgs e) { Response.Write("Page_Init" + "
"); } protected void Page_InitComplete(object sender, EventArgs e) { Response.Write("Page_InitComplete" + "
"); } protected void Page_PreLoad(object sender, EventArgs e) { Response.Write("Page_PreLoad" + "
"); } protected void Page_LoadComplete(object sender, EventArgs e) { Response.Write("Page_LoadComplete" + "
"); } protected void Page_PreRender(object sender, EventArgs e) { Response.Write("Page_PreRender" + "
"); } protected void Page_PreRenderComplete(object sender, EventArgs e) { Response.Write("Page_PreRenderComplete" + "
"); } protected void Page_Unload(object sender, EventArgs e) { //Response.Write("Page_Unload" + "
"); }

运行项目后可以看到页面输出:

Page_PreInit
Page_Init

Page_InitComplete
Page_PreLoad
Page_LoadComplete
Page_PreRender
Page_PreRenderComplete

如果取消Page_Unload()中的注释,将会得到System.Web.HttpException 异常,这是因为这事件是页面完全渲染后才触发,所以所有的响应消息(如:html代码)已经发送给了客户端,web窗体实例已经不可用了,因此web实例中的Response 和 Request属性已经被清理了 

你可能感兴趣的:(asp.net)