Asp.Net生命周期的详解
一.Asp.Net页面生命周期的概念
当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端IIS)发送一个request请求,服务器就会判断发送过来的请求页面,当完全识别 TTP页面处理程序类后,ASP.NET运行时将调用处理程序的 ProcessRequest 方法来处理请求、创建页面对象。通常情况下,无需更改此方法的实现,因为它是由 Page 类提供的。接下来被创建页面对象的ProcessRequest方法使页面经历了各个阶段:初始化、加载视图状态信息和回发数据、加载页面的用户代码以及执行回发服务器端事件。之后,页面进入显示模式:收集更新的视图状态,生成 HTML 代码并随后将代码发送到输出控制台。最后,卸载页面,并认为请求处理完毕。其中页面对象ProcessRequest方法 完成的这一系列事件的处理过程就是Asp.Net页面生命周期。
二、为什么需要了解Asp.Net页面生命周期
因为了解Asp.Net页面生命周期,可以帮助开发者在生命周期的合适阶段编写程序,以达到预期的效果,另外如果你想自己开发自定义控件,就必须熟悉页面的生命周期,以便正确进行控件的初始化,使用视图状态数据填充控件的属性,以及运行任何控件行为代码。也就是说只有熟悉了从创建到最后卸载等一系列的事件,开发起来才会顺心顺手,不会出现云里雾里的感觉。
三、生命周期阶段
1、请求页面:页请求发生在页生命周期开始之前。
2、开始:在开始阶段,将设置页属性,如Request和Response。在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack属性。
3、初始化页面:页面初始化期间,可以使用页中的控件,并将设置每个控件的UniqueID属性。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。
4、加载页面:加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性。
5、验证:在验证期间,将调用所有验证程序控件的Validate方法,此方法将设置各个验证程序控件和页的IsValid属性。
6、回发事件处理:如果请求是回发请求,则将调用所有事件处理程序。
7、呈现页面:在页面呈现期间,视图状态将被保存到页面,然后页面将调用每个控件,以将其呈现的输出提供给页的Response属性的OutputStream。
8、卸载页面:完全呈现页、将页发送至客户端并准备丢弃时,将调用卸载。此时,将卸载页属性(如Response和Request)并执行清理。
四、生命周期的事件
1、PreInit
使用该事件来执行下列操作:
检查 IsPostBack 属性来确定是不是第一次处理该页。
创建或重新创建动态控件。
动态设置主控页。
动态设置 Theme 属性。
读取或设置配置文件属性值。
注意:
如果请求是回发请求,则控件的值尚未从视图状态还原。如果在此阶段设置控件属性,则其值可能会在下一事件中被重写。
2、Init
在所有控件都已初始化且已应用所有外观设置后引发。使用该事件来读取或初始化控件属性。
3、InitComplete
由 Page 对象引发。使用该事件来处理要求先完成所有初始化工作的任务。
4、PreLoad
如果需要在 Load 事件之前对页或控件执行处理,请使用该事件。
在 Page 引发该事件后,它会为自身和所有控件加载视图状态,然后会处理 Request 实例包括的任何回发数据。
5、Load
Page 在 Page 上调用 OnLoad 事件方法,然后以递归方式对每个子控件执行相同操作,如此循环往复,直到加载完本页和所有控件为止。
使用 OnLoad 事件方法来设置控件中的属性并建立数据库连接
6、控件事件
使用这些事件来处理特定控件事件,如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。
注意:
在回发请求中,如果页包含验证程序控件,请在执行任何处理之前检查 Page 和各个验证控件的 IsValid 属性。
7、LoadComplete
对需要加载页上的所有其他控件的任务使用该事件。
8、PreRender
在该事件发生前:
Page 对象会针对每个控件和页EnsureChildControls。
设置了 DataSourceID 属性的每个数据绑定控件会调用 DataBind 方法。有关更多信息,请参见下面的数据绑定控件的数据绑定事件。
页上的每个控件都会发生 PreRender 事件。使用该事件对页或其控件的内容进行最后更改。
9、SaveStateComplete
在该事件发生前,已针对页和所有控件保存了 ViewState。将忽略此时对页或控件进行的任何更改。
使用该事件执行满足以下条件的任务:要求已经保存了视图状态,但未对控件进行任何更改。
10、Render
这不是事件;在处理的这个阶段,Page 对象会在每个控件上调用此方法。所有 ASP.NET Web 服务器控件都有一个用于写出发送给浏览器的控件标记的 Render 方法。
如果创建自定义控件,通常要重写此方法以输出控件的标记。不过,如果自定义控件只合并标准的 ASP.NET Web 服务器控件,不合并自定义标记,则不需要重写 Render 方法。有关更多信息,请参见开发自定义 ASP.NET 服务器控件。
用户控件(.ascx 文件)自动合并呈现,因此不需要在代码中显式呈现该控件。
11、Unload
该事件首先针对每个控件发生,继而针对该页发生。在控件中,使用该事件对特定控件执行最后清理,如关闭控件特定数据库连接。
对于页自身,使用该事件来执行最后清理工作,如:关闭打开的文件和数据库连接,或完成日志记录或其他请求特定任务。
注意
在卸载阶段,页及其控件已被呈现,因此无法对响应流做进一步更改。如果尝试调用方法(如 Response.Write 方法),则该页将引发异常。
我的公众号:原文
Asp.Net生命周期的详解相关推荐
- Android Lifecycle 生命周期组件详解
转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/99695779 本文出自[赵彦军的博客] 一.Lifecycle简介 为什么要引进 ...
- Vue的生命周期过程详解
Vue的生命周期 Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.销毁等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁的 ...
- Asp.Net WebForm生命周期的详解
一.http://Asp.Net页面生命周期的概念 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端IIS)发送一个request请求,服务器就会判断发送过来的请求页面,当完全识别 T ...
- vue生命周期的详解
vue生命周期: 1. 创建阶段:beforeCreate():created() 2. 挂载阶段:beforeMount():mounted() 3. 更新阶段:beforeUpdate():upd ...
- vue 生命周期的详解
一.vue生命周期的解析 > 1>什么是vue生命周期 每个vue实例在被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期.详细来说,就是Vue实例从开始创建,初始化数据, ...
- 超详细vue生命周期解析(详解)
vue是每一个前端开发人员都绕不过的一个技术,在国内的市场占有量也是非常的大,我们大部分人用着vue, 却不知道他内部其实经历了一些什么.每个生命周期又是什么时候开始执行的.我们今天来详细的看一看 首 ...
- android 屏幕横竖屏切换时生命周期运行详解,创建横屏layout,has no declaration in the base
横屏代码 1.配置文件设置 android:screenOrientation="landscape" 2.java代码设置 setRequestedOrientation(Act ...
- android fragment 覆盖,Android Fragment 替换覆盖生命周期方法详解
FragMent add 与 replace 方法执行试图切换生命周期变化 Activity 生命周期中共有七个方法,Fragment 的生命周期方法 则有11个,一个Fragment 在Activi ...
- vue 生命周期(详解)
前言 首先我们要搞明白生命周期到底是什么? 顾名思义,生命周期就是我们从开始创建vue实例到销毁的一个过程,这一过程就叫做生命周期,这就好比我们的人生一样从出生到结束的一个过程. 切记,生命周期函数不 ...
最新文章
- 迁移学习之DenseNet121(121层),DenseNet169(169层),DenseNet201(201层)(图像识别)
- 北京中医药大学等8所高校被世界医学院校名录除名,毕业生无法获取英美从医资格...
- 1.8 ionic3入门——测滑菜单(side menu)中的界面跳转
- [NTU-Machine-learning-note]1 Introduction(2)
- 武鸣高中2021高考成绩查询,2019年广西两大重点高中成绩大比拼
- http get extension information - another way to get host url and port number of current application
- ruby 嵌套函数_Ruby嵌套直到循环带有示例
- 855计算机应用基础,2017年曲阜师范大学信息技术与传播学院855计算机应用基础考研导师圈点必考题汇编...
- 公安部4号令中关于电子邮服务器
- 2019工作榜单 | Python程序员吸金榜,AI排第一,这个我服!
- Ubuntu13.04配置优化(二)转贴
- java题库软件_基于JAVA题库管理系统.doc
- sqliteman安装出现E: Unable to locate package sqliteman 解决办法
- 玩转华为数据中心交换机系列 | 配合Eth-Trunk接口流量本地优先转发
- C++优化三板斧:Three Optimization Tips for C++
- CISCO CCNA CCNP CCIE认证题库下载
- 打不出电话显示无法连接到服务器,打电话显示无法连接到服务器
- c语言知识地图,【程序设计论文】C语言程序设计翻转课堂研究(共3546字)
- 【设计模式实战】简单工厂、工厂方法、抽象工厂:原理篇
- PTES-渗透测试执行标准