对于

ASP.NET

开发者,理解

ASP.NET

的页面生命周期是非常重要的。主要是为了搞明白在哪里放置特

定的方法和在何时设置各种页面属性。但是记忆和理解页面生命周期里提供的事件处理方法

(method)

常困难。互联网上有很多关于页面生命周期内部机制的文章,所以本文只准备简单覆盖技术的基础部分,

更主要的目的是给大家提供一个简单得记忆页面生命周期的方法。

准确的记忆

ASP.NET

页面生命周期每一个阶段发生了什么事情是比较困难的,一种便于记忆的方法是根

据各个阶段的名字组合出一个缩写。微软的文档给出的

ASP.NET

生命周期如下:

Page

Request

Start

Page

Initialization

Load

Validation

Postback

event

handling

Rendering

Unload

根据这个组合出一个缩写非常容易。

既然

Page

Request

技术上并不是页面生命周期的一部分

(这个阶段

仅仅标示我们是否开始一个页面周期或者从缓存加载一个页面),我们为了方便,就不包括这一阶段。

S

Start

I

Initialize

L

Load

V

Validate

E

Event

Handling

R

Render

这样就组合出一个缩写

“SILVER'

,这个英文单词非常好记。当然,一定要记住页面生命周期的最后一个环

unload

没有包括在里面。如果你觉得有必要,你可以记忆为

“SILVER

-

U”

或者

“SILVER

-YOU"

,尽管

有点破坏这个记忆法的完美性。现在,我们非常容易就记住了页面生命周期,接着我们总结一下每一步都

发生了什么,都有什么事件伴随着发生。

1.

Start

在这个阶段,页面属性,比如

Request,

Response,

IsPostBack

UICulture

被创建。最为一个开发

人员,大部分时候在这个阶段你不需要做任何事。如果你需要调用或者重写

(override)

这一阶段的行为,

可以使用

PreInit

方法创建或者重新创建动态控件,设置

master

page

或者

theme

或者读取和设置

pr

ofile

property

的值。要注意的一点是,如果是回传

(postback)

的页面请求,所有控件的值还没有从

vie

w state

里还原,如果你在这个阶段设置一个控件的值,这个值有可能在下面的阶段被重写并覆盖

2.

Initialize

这个阶段对于开发人员是很重要。在这个阶段,

them

e

被应用,所有的控件都被设置了唯一的

ID

。开发

人员在这个阶段可以调用

Init,

InitComplete

PreLoad

方法。微软关于这些方法使用的建议如下:

Init

这个事件发生在所有控件被初始化并且皮肤设置也被应用后。使用这个事件来读取控件的初始化

值。

名人堂:众名人带你感受他们的驱动人生

马云任志强李嘉诚柳传志史玉柱

InitComplete

这个事件被

Page

对象触发,使用这个事件处理那些要求所有初始化工作都完成后才能

做的事情。

PreLoad

-

如果在页面或者控件进入

Load

事件前你有什么要处理的,使用这个事件。

Page

在触发这个

事件后,

Page

就会为自己和所有的控件加载

view state

并且处理所有

Request

中的

postback

数据。

3.

Load

这个阶段可能是开发者使用得最多的一个阶段。在这个阶段,所有的控件被

viewstate

中信息填充并被加

载,

OnLoad

事件被触发。

在这个阶段你可以为页面上所有的服务端控件设置属性,

得到

query

strings

建立数据库连接。

4.

Validation

如果你的控件要求验证,验证会在这个阶段发生,这个时候你可以检查控件的

IsValid

属性。跟这个阶段

关联的事件是

Validate

,它有一个可以接受验证字符串群的重载方法

(

overload

method)

,这个重载方

法执行特定控件群的验证。

5.

Event

Handling

所有服务器端控件的事件处理发生在这个阶段。

也就是说

Click,

SelectedIndexChanged

等等这些事件

会应用到你的服务器端控件,如果是页面请求是回传

(postback)

的话,这些事件的处理函数就会被控件触

发。这个阶段可以使用的事件如下:

LoadComplete

在这个阶段,页面上所有的控件加载完毕

PreRender

这里有几个重点,第一:页面对象

(page object)

会调用每一个控件的

EnsureChildCont

rols

函数,并最终调用自己的。其次:所有具有

DataSourceID

的数据绑定控件都会调用自己的

DataBi

nd

函数。要注意的一点是,

PreRender

事件会发生在一个页面的每一个控件上。在这个事件的最后,页

面和所有控件的

ViewState

被存储。

SaveStateComplete

到这里,

ViewState

已经存储完毕,如果你有什么操作不需要修改控件但需要

修改

ViewState

的,可以放在

SaveStateComplete

里面。

6.

Render

渲染

(Render)

实际上不是一个事件,

页面对象调用每一个控件的

Render

方法从而按顺序的输出控件的

H

TML

代码。

编写用户自定义控件的开发者对这个阶段最感兴趣了,

因为输出用户自定义

HTML

代码的标准

做法就是重写

Render

方法。

如果你的控件是从

ASP.NET

服务器端控件继承来的,

你也许不需要重写

Re

nder

方法,

除非你想呈现一个与用户控件默认行为不同的行为。

这些都超出这个文档要讨论的范围了,

果想了解更多,

请参考

Microsoft's

Developing Custom

ASP.NET

Server

Controls.

(

http://ms

dn2.microsoft./zt27com/en-us/librarytfhy.aspx)

7.

Unload

最后这个事件首先是被各个控件逐一触发,最后被页面触发。在这个时刻,所有的控件已经被渲染为输出

(output stream)

并且无法被修改。

这个阶段中,

任何试图对

response stream

的操作都会引发异常。

这个事件主要用于做一些清理工作,比如关闭数据库连接和打开的文件或者登记事件记录等等其它任务。

页面周期中都有哪些方法

下面列出

ASP.NET

页面生命周期中所有的方法,这些方法都可以被重写

(override)

,要注意的是这些方

法有的会递归调用,有个会被页面中的内容重复调用,这个列表是按照页面加载时最通用的顺序排列的。

Construct

ProcessRequest

FrameworkInitialize

InitializeCulture

If

child

controls are present:

AddParsedSubObject

CreateControlCollection

AddedControl

ResolveAdapter

DeterminePostBackMode

OnPreInit

OnInit

TrackViewState

OnInitComplete

OnPreLoad

OnLoad

OnLoadComplete

EnsureChildControls

CreateChildControls

OnPreRender

OnPreRenderComplete

SaveViewState

OnSaveStateComplete

CreateHtmlTextWriter

RenderControl

Render

RenderChildren

VerifyRenderingInServerForm

OnUnload

Dispose

结论

在开发

ASP.NET

程序时,了解什么时候发生什么事情是非常重要的。理解页面中事件是如何层层展开节

省大量挠头和查错的时间。当这些页面周期中的事件难以记住时,我希望这个使用的法子能帮助你梳理出

在程序里哪个地方需要做什么处理。

我写这篇文章是为了帮助大家,也方便了自己。即使是熟练的开发人员有时也会忘记那些先那些后。这篇

文章不是面面俱到,而是希望给初学者和中级水平的开发者提供一些

小技巧

,从而帮助他们避免一些基

本的错误

NET 页面生命周期相关推荐

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

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

  2. WebForm页面生命周期及asp.net运行机制

    转载至:https://www.cnblogs.com/liangxiaofeng/p/5620033.html 1.先上几张原理图着重理解: 现在针对第四副图原理进行解析: 流程: 1.浏览器发送请 ...

  3. ASP.NET页面生命周期描述

    附一篇文章:http://blog.csdn.net/Vigorcsdn/article/details/572552 在以前写个一篇关于ASP.NET页面生命周期的草稿,最近又看了看ASP.NET, ...

  4. 【Flutter】Flutter 页面生命周期 ( 初始化期 | createState | initState | 更新期 | build | 销毁期 | dispose)

    文章目录 一.Flutter 页面生命周期 1.StatelessWidget 组件生命周期函数 2.StatefulWidget 组件生命周期函数 二.StatefulWidget 组件生命周期 1 ...

  5. Asp.Net页面生命周期(多图)

    抽空用viso画了请求处理模型图 1.浏览器实际上是一个Socket客户端,它向服务器发送请求报文 2.请求报文被封装为http请求,通过socket发送到IIS服务器 3.内核模式包含一个Http. ...

  6. ASP.NET页面生命周期与应用程序生命周期

    页面生命周期 页面生命周期执行一系列步骤:页面的初始化.实例化控件.还原和维护状态.运行事件处理程序代码.呈现.为了在合适的阶段执行所需的代码,所以要对页面生命周期非常熟悉.在页生命周期的各个阶段,页 ...

  7. 页面生命周期:DOMContentLoaded, load, beforeunload, unload

    页面生命周期:DOMContentLoaded, load, beforeunload, unload 原文地址:http://javascript.info/onload... HTML页面的生命周 ...

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

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

  9. 页面生命周期_微信小程序的生命周期学习笔记-应用篇

    在我们学习微信小程序的过程当中,我们会参考很多资料.在这些资料中,我们经常能够看到"生命周期"四个字,在前面的课程中也提到过.在这里做一个说明. 生命周期是一类函数的统称,这些函数 ...

  10. 记不住ASP.NET页面生命周期的苦恼

    介绍 对于ASP.NET开发者,理解ASP.NET的页面生命周期是非常重要的.主要是为了搞明白在哪里放置特定的方法和在何时设置各种页面属性.但是记忆和理解页面生命周期里提供的事件处理方法(method ...

最新文章

  1. android 学习随笔十二(网络:使用异步HttpClient框架)
  2. Blockquotes,引用,html里面,经常用到的一个!
  3. 淘宝山寨IOS sdk
  4. JEECG Word模板导出教程
  5. 求合作开发伙伴 .NET 中高级工程师 1-2名
  6. 小课堂 | 你听过雾计算?对了,还有霾计算
  7. HDFS上大文件如何切分?
  8. FIFO设计中的注意问题与技巧
  9. 每日学习笔记(12)
  10. MIMO Radar
  11. 简单概括HAPI(Houdini Engine API)所涵盖的功能
  12. **RAKsmart服务器租用相对其他美国服务器的优势**
  13. 短链接生成器,adf.ly、shorte.st、ouo.io、adfoc.us哪个更好,有哪些区别
  14. Google Filament引擎编译记录
  15. JIT - 即时编译
  16. SpaceX火箭数据 API 开源,支持 Python
  17. 学习进销存管理系统知识
  18. mysql安装 解压版
  19. 转载 | 万字深度解析 NFT 借贷市场
  20. 嵌入式linux dlna,基于嵌入式Linux的家用蓝光播放机上DLNA功能的实现

热门文章

  1. 适合平板用的Android版本,安卓平板专享 推荐五款Pad版应用浏览器
  2. NLP学习笔记——情感分析一 (简介)
  3. 《格鲁夫给经理人的第一课》--读书笔记
  4. MinIO 中的图片在前端列表渲染时报错 404
  5. 利用Olami SDK 实现语音控制计算器(iOS)
  6. iPad谷歌浏览器怎么开摄像头_谷歌浏览器书签栏怎么显示_谷歌浏览器显示书签栏步骤...
  7. openlayers官方教程(三)Basics——Zooming to your location
  8. 使用java实现路由协议_如果使用OSPF作为路由协议,那么( )【选两项】
  9. HTML 5 音频与视频标签
  10. 最新前端开发面试笔试题及答案---图片(面试题系列持续更新中)(4)