ASP.NET 页面生存周期概览
ASP.NET 页面运行时会通过生命周期来完成一系列的处理步骤。包括初始化,控件实例化,状态恢复和维护,运行事件处理代码,以及外观的呈现。了解页面生命周期是重要的,可以根据需要针对特定情景编写处理代码。另外,开发自定义控件也必须熟悉页面生命周期中正确的控件初始化指令,使用视图状态数据的控件属性,以及运行控件行为逻辑(控件的生命周期依赖于页面生命周期,因此页面会为控件引发比自己更多的事件)。
页面生命周期的一般情况
一般情况下,页面通过下表列出的情景大纲。除了页面生命周期情景之外,在请求开始和结束的时候还会发生除页面之外的应用程序情景。
情景 | 描述 |
---|---|
请求页面 |
页面请求发生在页面生命周期开始之前。当用户发送页面请求,ASP.NET 检测是否需要对页面进行处理或编译(页面生命周期由此开始),也可以直接用已缓存的页面作为回应。 |
开始 |
在该步骤中会设置页面的 |
页面初始化 |
页面初始化时,页面控件会生效并为每个控件设置 |
读入 |
读入时,如果当前请求已回传,控件属性会从视图状态和控件状态中读入。 |
验证 |
验证时会调用所有验证器的 |
处理回传事件 |
如果请求已回传,将调用所有事件处理器。 |
呈现 |
页面呈现时会保存视图状态,并将所有控件输出通过 |
卸载 |
当页面完全呈现后调用,且发送到客户端。同时,页面的 |
生命周期事件
在每个页面生命周期情景下,可以对页面引发的事件编写自定义代码进行处理。至于控件事件,则通过绑定属性(如 OnClick
)或编写代码的方式进行事件处理器绑定。
页面也支持自动事件的触发,ASP.NET 会监视并在特定事件引发后自动运行这些有特定名称的事件。如果 @ 页面指令的 AutoEventWireup
参数设置成 true(默认值为 true),页面事件就会自动绑定到以“Page_事件”格式命名的方法(如 Page_Load
和 Page_Init
)。
下表列出部分页面生命周期中的常用事件。还有一些未被列出的原因是不常用,且主要用于 ASP.NET Web 页面对控件的初始化和呈现。除非编写自定义 ASP.NET 服务器控件,就需要了解这些情景。
页面事件 | 典型用途 |
---|---|
|
注意:如果请求被回传,控件的值就不能从视图状态中恢复。在这个时候设置的控件属性,将会覆盖下一个情景中的值。 |
|
|
|
|
控件事件 |
完成应用程序处理:
|
|
|
|
完成最后的清除工作,其中包括:
注意:在卸载时,页面和控件都会重新呈现,可进一步对回应过程进行修改。如果尝试对 |
附加的页面生命周期考虑因素
请注意下列关于页面生命周期的附加信息:
与页面一样,每个 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
)来明确地运行基类的实现。
转载于:https://www.cnblogs.com/Laeb/archive/2006/12/07/585377.html
ASP.NET 页面生存周期概览相关推荐
- Asp.net页面生存周期
# 事件或方法 功能 描述 1 Init 事件 页面初始化 初始化设置. 2 LoadViewState 方法 加载视图状态 填充ViewState属性. 3 LoadPostData 方法 处理回发 ...
- ASP.NET页面揭秘之页面生命周期
首先简单介绍下Page类. 在.NET Framework中,Page类提供了ASP.NET应用程序从.aspx文件开始创建的所有对象的基本行为.Page类在System.Web.UI命名空间中定义, ...
- ASP.NET 状态管理概览
页面每次被回传到服务器的时候都会创建 Web 页面类的一个新实例.在传统的 Web 开发中,这意味着在每次回传的过程中,页面中所有与页面和控件相关联的信息都将被丢失.例如,如果用户在一个文本框中输入了 ...
- ASP.NET页面揭秘之页面生命周期【转】
首先简单介绍下Page类. 在.NET Framework中,Page类提供了ASP.NET应用程序从.aspx文件开始创建的所有对象的基本行为.Page类在System.Web.UI命名空间中定义, ...
- ASP.NET 状态视图概览
Web 应用程序是无状态的.服务器中的页面在每一次被请求的时候都会创建 Web 页面类的新实例.这通常意谓着所有与页面和控件相关联的信息在每次回传过程中都将被丢失.例如,如果用户在某个 HTML We ...
- ASP.NET页面与IIS底层交互和工作原理详解(一)
第一回: 引言 我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net.他们耐心.细致地告诉你如何一步步拖放控件.设置控件属性.编写CodeBehind代码,以实 ...
- ASP.NET页面之间传递值的几种方式
页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...
- [转]ASP.NET页面生命周期描述
ASP.NET页面生命周期描述 vigorID:Vigorcsdn 在以前写个一篇关于ASP.NET页面生命周期的草稿,最近又看了看ASP.NET,做个补充,看看页面初始过程到底是怎么样的 下面是AS ...
- ASP.NET页面错误处理
ASP.NET页面错误处理 ASP.NET应用可以再代码中利用异常捕获来处理错误(try.catch)但是应用出现的所有错误,都用异常捕获来处理是一种不良的编程习惯.try.catch使用简单,但是过 ...
最新文章
- 匹配3位或4位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔...
- AI人工智能的未来?AI科技与AI教程?答案都在这里!
- 来!一起捋一捋机器学习分类算法
- 并发编程-单元练习题
- Windows Server 2008 R2x64 IIS7+PHP5.6 错误 500.0
- C++中关于类中常数静态成员初始化的问题
- Linux shell tips and tricks
- Bootstrap3 折叠插件的事件
- liunx创建php环境变量,linux添加环境变量的方法总结
- Log42j 源代码分析:plugin(插件)机制
- kaggle实战_4解决高维数据分类/回归问题--房价预测
- MyEclipse9 导入ExtJs校验报错的处理办法
- 我们究竟什么时候可以使用Ehcache缓存(转)
- [iOS] 使用xib做为应用程序入口 with Code
- Django中使用MySQL
- oracle不完全恢复类型,Oracle——不完全恢復
- 有序多分类Logistic回归(图文+数据集)【SPSS 079期】
- DevExpress报表控件v21.2 - 全新的Visual Studio报表设计器
- Construct2太空射击游戏-Debug
- ConvNext模型复现--CVPR2022
热门文章
- React开发(198):需要加个{}
- 保姆级!!前端必会Taro入门级教学!!
- React开发(112):不要写多余的select
- 实现深拷贝的几种方法
- “约见”面试官系列之常见面试题之第七十七篇之vuex中mutation和action的详细区别 (建议收藏)
- “约见”面试官系列之常见面试题之第七十三篇之js文件中import中加{}和不加{}的区别(建议收藏)
- 前端学习(1890)vue之电商管理系统电商系统之绘获取用户列表数据
- 前端学习(1840):前端面试题之小程序入门
- spring学习(34):构造函数依赖注入
- java学习(152):字节缓冲输出流