惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy International News Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
O
OpenAI News
Cloudbric
Cloudbric
Google Online Security Blog
Google Online Security Blog
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Spread Privacy
Spread Privacy
NISL@THU
NISL@THU
N
News and Events Feed by Topic
T
Tenable Blog
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
P
Proofpoint News Feed
Webroot Blog
Webroot Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Jina AI
Jina AI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
L
LangChain Blog
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东

博客园 - fanrsh

Javascript's Event 的一点总结 [转]SQL Server2005 SQLCLR代码安全之权限(3) [转]SQL Server2005 SQLCLR代码安全之权限(2) [转]SQL Server2005 SQLCLR代码安全之权限(1) Remoting事件序列一:客户端触发服务器端事件 jquery入门1:简单收缩菜单 - fanrsh - 博客园 jQuery工作原理解析以及源代码示例 推荐一个快速反射调用的类 Visual Studio 2005的版本情况和新特征详细介绍 Creating and writing ASP.NET 2.0 custom Configuration Sections 给大家一个CSS编辑工具,结合JQUERY用的很爽啊 flv视频是如何转的? codesmith学习资源 asp.net 事件验证 CSS循序渐进系列 [更新中]Lucene.net,中文分词技术 ICTCLAS研究 .net sql连接字符串详解 socket专家好文收藏 jQuery学习资源
ASP.NET 页面生存周期概览
fanrsh · 2007-08-29 · via 博客园 - fanrsh

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)来明确地运行基类的实现。