ASP.NET页面生命周期

一、     什么是ASP.NET页面的生存周期

所谓的页面生存周期,指的是一个ASP.NET页面对象从初始化到销毁经过的步骤。在通常情况下我们在浏览器地址栏中输入网址查看页面时,浏览器则会向服务器端(IIS)发送一个Request请求,IIS就会判断发送过来的请求页面,完全识别HTTP页面处理程序类后,一旦某个请求对应到一个ASP.NET 页面时,一个直接或间接继承自System.Web.UI.Page类型的对象开始初始化,并且开始执行页面生存周期中的所有步骤。

而每一个ASP.NET Page页都有2个部分,即显示部分和逻辑部分:

一个部分是在浏览器中进行显示的部分,即我们平时在浏览器中看见的一切,它包含了HTML标签、ViewState形式的隐藏域以及在HTML input中的数据。当这个页面被提交到服务器的时候,这些HTML标签会被创建到ASP.NET控件之中,并且ViewState还会和表单数据绑定在一起。另一个部分是在.cs结尾的文件中的进行业务逻辑操作的部分,服务器中下载数据和服务器控件后,可以根据已有数据撰写自己的逻辑代码。

 

ASP.NET页面生命周期

 

前台代码和后台代码关联关系在前台页面的最顶端位置:

 

ASP.NET页面生命周期

 

 

AutoEventWireup: 指示是否自动启用页事件,表示是否自动地将页面的事件和相应的方法绑定到一起,一般设为false

CodeFile: 指示后台代码文件。

Inherits: 继承类,定义供页继承的代码隐藏类。可以是从 Page 类派生的任何类。

 

二、     为什么要了解ASP.NET页面的生命周期

明白了页面生命周期,及其中事件发生的顺序,以及事件发生时控件的状态,就能找到合适的接入点来植入你的程序逻辑,也能有助于我们对程序调试中发生问题的地方的定位。换言之,把逻辑处理放在 PageLoad事件中执行并不一定是最优选择。

 

三、     看图说话

 页面请求过程图

   

ASP.NET页面生命周期

        2.    报文请求流程如下图所示:

      

ASP.NET页面生命周期

 

 

 

四、     页面生命周期事件

页请求:页请求发生在页面生命周期开始之前,用户请求页面时,asp.net将确定是否需要分析和编译页。

开始:在开始阶段,将设置页属性,如request和response。在此阶段,页面还将确定请求是回发请求还是新请求,并设置ispostback属性。

页初始化(PreInit 、 Init 、InitComplete):在初始化期间可以使用页中的控件,并设置控件的ID属性,设置主题,引用母版页,跟踪记录ViewState。

加载(LoadState、ProcessPostData、PreLoad、Load、ProcessPostData):反序列化ViewState,判断首次加载,不是则执行ProcessPostData(第一次)事件将表单中的数据加载到控件中,然后再Load事件中进行逻辑处理,处理完毕后执行ProcessPostData(第二次)事件将Load中提交至表单的数据加载至控件中。

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

回发事件处理(ChangedEvent、PostBackEvent):这里首先会比较ViewState中的数据和页面上一次回传的数据,觉得哪些时间需要被触发,这里的时间是逐一被触发的,但顺序将无法确定。然后会查看是否触发Post Back事件,该时间也就是页面提交的事件。可处理DropDownList用于ViewState可能造成的changed异常事件

呈现(SaveState、SaveStateComplete、Render):首先页面会编码保存所有的ViewState , 然后将其潜入到页面的一个隐藏空间中。接着转换所有的控件标签并生成页面HTML,并发回客户端。

卸载:完全呈现页,并将页面发送到客户端,准备对其该页后,将调用卸载。此时将卸载页属性并执行清理。

 

        一般情况下执行步骤为以下:

序号

 

事件

 

工作内容

 

1

 

OnPreInit

 

1. 检查 IsPostBack 属性来确定是不是第一次处理该页。

2. 创建或重新创建动态控件。

3. 动态设置主控页。

4. 动态设置 Theme 属性。

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyszj.html