ASP.NET 页面运行时会通过生命周期来完成一系列的处理步骤。包括初始化,控件实例化,状态恢复和维护,运行事件处理代码,以及外观的呈现。了解页面生命周期是重要的,可以根据需要针对特定情景编写处理代码。另外,开发自定义控件也必须熟悉页面生命周期中正确的控件初始化指令,使用视图状态数据的控件属性,以及运行控件行为逻辑(控件的生命周期依赖于页面生命周期,因此页面会为控件引发比自己更多的事件)。

页面生命周期的一般情况

一般情况下,页面通过下表列出的情景大纲。除了页面生命周期情景之外,在请求开始和结束的时候还会发生除页面之外的应用程序情景。

情景 描述

请求页面

页面请求发生在页面生命周期开始之前。当用户发送页面请求,ASP.NET 检测是否需要对页面进行处理或编译(页面生命周期由此开始),也可以直接用已缓存的页面作为回应。

开始

在该步骤中会设置页面的 RequestResponse 属性。页面会根据请求是否回传或新建来设置 IsPostBack 属性。另外,在开始时,页面还会设置 UICulture 属性。

页面初始化

页面初始化时,页面控件会生效并为每个控件设置 UniqueID 属性。主题定义也被作用于页面。如果当前请求已回传,回传的数据并不会被读取,且视图状态也不保存任何控件的属性值。

读入

读入时,如果当前请求已回传,控件属性会从视图状态和控件状态中读入。

验证

验证时会调用所有验证器的 Validate 方法,并分别为页面中的验证器设置 IsValid 属性。

处理回传事件

如果请求已回传,将调用所有事件处理器。

呈现

页面呈现时会保存视图状态,并将所有控件输出通过 ResponseOutputStream 对象进行呈现。

卸载

当页面完全呈现后调用,且发送到客户端。同时,页面的 ResponseRequest 属性也被卸载并清除。

生命周期事件

在每个页面生命周期情景下,可以对页面引发的事件编写自定义代码进行处理。至于控件事件,则通过绑定属性(如 OnClick)或编写代码的方式进行事件处理器绑定。

页面也支持自动事件的触发,ASP.NET 会监视并在特定事件引发后自动运行这些有特定名称的事件。如果 @ 页面指令的 AutoEventWireup 参数设置成 true(默认值为 true),页面事件就会自动绑定到以“Page_事件”格式命名的方法(如 Page_LoadPage_Init)。

下表列出部分页面生命周期中的常用事件。还有一些未被列出的原因是不常用,且主要用于 ASP.NET Web 页面对控件的初始化和呈现。除非编写自定义 ASP.NET 服务器控件,就需要了解这些情景。

页面事件 典型用途

Page_PreInit

  • 使用 IsPostBack 属性检测页面被回传还是第一次被请求。

  • 创建或重建动态控件。

  • 动态设置模板页。

  • 动态设置 Theme 属性。

  • 读取或设置档案属性。

注意:如果请求被回传,控件的值就不能从视图状态中恢复。在这个时候设置的控件属性,将会覆盖下一个情景中的值。

Page_Init

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

Page_Load

  • 读取并更新控件属性。

控件事件

完成应用程序处理:

  • 如果页面中包含验证器控件,则在进行任何操作之前先检查所有验证控件的 IsValid 属性。

  • 处理指定事件(如 Button 控件的 Click 事件)。

Page_PreRender

  • 完成页面控件的最后更改。

Page_Unload

完成最后的清除工作,其中包括:

  • 关闭文件和数据库连接。

  • 完成登入或其他请求任务。

注意:在卸载时,页面和控件都会重新呈现,可进一步对回应过程进行修改。如果尝试对 Response.Write 之类的方法进行,页面就会产生并抛出一个异常。

附加的页面生命周期考虑因素

请注意下列关于页面生命周期的附加信息:

  • 与页面一样,每个 ASP.NET 服务器控件都拥有属于自已的生命周期。比如,控件的 InitLoad 方法会在相应的页面事件中得到调用。而页面控件的 Init 方法只能在页面 Init 方法之后调用。但是,页面的 Load 方法能够在控件 Load 方法之前被调用。

  • 通过控件事件可以自定义控件的外观和内容。比如,所有控件都引发 InitLoadUnload 等事件,尽管开发者并不经常处理这些事件。但在处理控件事件时却经常需要用到(如 Button 控件的 Click 事件和 ListBox 控件的 SelectedIndexChanged 事件)。在某些情况下还有可能处理控件的 DataBindingDataBound 事件。

  • 另外,在处理页面生命周期事件时,可以重载 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 页面生存周期概览相关推荐

  1. Asp.net页面生存周期

    # 事件或方法 功能 描述 1 Init 事件 页面初始化 初始化设置. 2 LoadViewState 方法 加载视图状态 填充ViewState属性. 3 LoadPostData 方法 处理回发 ...

  2. ASP.NET页面揭秘之页面生命周期

    首先简单介绍下Page类. 在.NET Framework中,Page类提供了ASP.NET应用程序从.aspx文件开始创建的所有对象的基本行为.Page类在System.Web.UI命名空间中定义, ...

  3. ASP.NET 状态管理概览

    页面每次被回传到服务器的时候都会创建 Web 页面类的一个新实例.在传统的 Web 开发中,这意味着在每次回传的过程中,页面中所有与页面和控件相关联的信息都将被丢失.例如,如果用户在一个文本框中输入了 ...

  4. ASP.NET页面揭秘之页面生命周期【转】

    首先简单介绍下Page类. 在.NET Framework中,Page类提供了ASP.NET应用程序从.aspx文件开始创建的所有对象的基本行为.Page类在System.Web.UI命名空间中定义, ...

  5. ASP.NET 状态视图概览

    Web 应用程序是无状态的.服务器中的页面在每一次被请求的时候都会创建 Web 页面类的新实例.这通常意谓着所有与页面和控件相关联的信息在每次回传过程中都将被丢失.例如,如果用户在某个 HTML We ...

  6. ASP.NET页面与IIS底层交互和工作原理详解(一)

    第一回: 引言 我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net.他们耐心.细致地告诉你如何一步步拖放控件.设置控件属性.编写CodeBehind代码,以实 ...

  7. ASP.NET页面之间传递值的几种方式

    页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...

  8. [转]ASP.NET页面生命周期描述

    ASP.NET页面生命周期描述 vigorID:Vigorcsdn 在以前写个一篇关于ASP.NET页面生命周期的草稿,最近又看了看ASP.NET,做个补充,看看页面初始过程到底是怎么样的 下面是AS ...

  9. ASP.NET页面错误处理

    ASP.NET页面错误处理 ASP.NET应用可以再代码中利用异常捕获来处理错误(try.catch)但是应用出现的所有错误,都用异常捕获来处理是一种不良的编程习惯.try.catch使用简单,但是过 ...

最新文章

  1. 匹配3位或4位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔...
  2. AI人工智能的未来?AI科技与AI教程?答案都在这里!
  3. 来!一起捋一捋机器学习分类算法
  4. 并发编程-单元练习题
  5. Windows Server 2008 R2x64 IIS7+PHP5.6 错误 500.0
  6. C++中关于类中常数静态成员初始化的问题
  7. Linux shell tips and tricks
  8. Bootstrap3 折叠插件的事件
  9. liunx创建php环境变量,linux添加环境变量的方法总结
  10. Log42j 源代码分析:plugin(插件)机制
  11. kaggle实战_4解决高维数据分类/回归问题--房价预测
  12. MyEclipse9 导入ExtJs校验报错的处理办法
  13. 我们究竟什么时候可以使用Ehcache缓存(转)
  14. [iOS] 使用xib做为应用程序入口 with Code
  15. Django中使用MySQL
  16. oracle不完全恢复类型,Oracle——不完全恢復
  17. 有序多分类Logistic回归(图文+数据集)【SPSS 079期】
  18. DevExpress报表控件v21.2 - 全新的Visual Studio报表设计器
  19. Construct2太空射击游戏-Debug
  20. ConvNext模型复现--CVPR2022

热门文章

  1. React开发(198):需要加个{}
  2. 保姆级!!前端必会Taro入门级教学!!
  3. React开发(112):不要写多余的select
  4. 实现深拷贝的几种方法
  5. “约见”面试官系列之常见面试题之第七十七篇之vuex中mutation和action的详细区别 (建议收藏)
  6. “约见”面试官系列之常见面试题之第七十三篇之js文件中import中加{}和不加{}的区别(建议收藏)
  7. 前端学习(1890)vue之电商管理系统电商系统之绘获取用户列表数据
  8. 前端学习(1840):前端面试题之小程序入门
  9. spring学习(34):构造函数依赖注入
  10. java学习(152):字节缓冲输出流