ASP.NET Page执行顺序(ASP.NET生命周期)
此部分说明的生命周期只有部分:
---引用MSDN
阶段 |
说明 |
页请求 |
页请求发生在页生命周期开始之前。用户请求页时,ASP.NET 将确定是否需要分析和编译页(从而开始页的生命周期),或者是否可以在不运行页的情况下发送页的缓存版本以进行响应。 |
开始 |
在开始阶段,将设置页属性,如 Request和 Response在此阶段,页还将确定请求是回发请求还是新请求,并设置 IsPostBack 属性。此外,在开始阶段期间,还将设置页的 UICulture 属性。 |
页初始化 |
页初始化期间,可以使用页中的控件,并将设置每个控件的 UniqueID 属性。此外,任何主题都将应用于页。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。 |
加载 |
加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性。 |
验证 |
在验证期间,将调用所有验证程序控件的 Validate 方法,此方法将设置各个验证程序控件和页的 IsValid 属性。 |
回发事件处理 |
如果请求是回发请求,则将调用所有事件处理程序。 |
呈现 |
在呈现之前,会针对该页和所有控件保存视图状态。在呈现阶段中,页会针对每个控件调用 Render 方法,它会提供一个文本编写器,用于将控件的输出写入页的 Response 属性的 OutputStream 中。 |
卸载 |
完全呈现页并已将页发送至客户端、准备丢弃该页后,将调用卸载。此时,将卸载页属性(如Response 和 Request)并执行清理。 |
程序测试页面加载顺序

1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.Web.UI;
6 using System.Web.UI.WebControls;
7
8 namespace Order
9 {
10 public partial class TestControls : System.Web.UI.Page
11 {
12 static int count = 0;
13 //4
14 protected void Page_Load(object sender, EventArgs e)
15 {
16 Response.Write(count + "----Page_Load <br/>");
17 count++;
18 }
19 //0
20 protected override void OnPreInit(EventArgs e)
21 {
22 base.OnPreInit(e);
23 Response.Write(count + "----OnPreInit <br/>");
24 count++;
25 }
26 //1
27 protected override void OnInit(EventArgs e)
28 {
29 base.OnInit(e);
30 Response.Write(count + "----OnInit <br/>");
31 count++;
32 }
33 //5
34 protected override void OnLoad(EventArgs e)
35 {
36 base.OnLoad(e);
37 Response.Write(count + "----OnLoad <br/>");
38 count++;
39 }
40 //3
41 protected override void OnPreLoad(EventArgs e)
42 {
43 base.OnPreLoad(e);
44 Response.Write(count + "----OnPreLoad <br/>");
45 count++;
46 }
47 //6
48 protected override void OnLoadComplete(EventArgs e)
49 {
50 base.OnLoadComplete(e);
51 Response.Write(count + "----OnLoadComplete <br/>");
52 count++;
53 }
54 //2
55 protected override void OnInitComplete(EventArgs e)
56 {
57 base.OnInitComplete(e);
58 Response.Write(count + "----OnInitComplete <br/>");
59 count++;
60 }
61 protected override void OnUnload(EventArgs e)
62 {
63 base.OnUnload(e);
64 }
65 protected override void OnDataBinding(EventArgs e)
66 {
67 base.OnDataBinding(e);
68 Response.Write(count + "----OnDataBinding <br/>");
69 count++;
70 }
71 //7
72 protected override void OnPreRender(EventArgs e)
73 {
74 base.OnPreRender(e);
75 Response.Write(count + "----OnPreRender <br/>");
76 count++;
77 }
78 protected void btnGraphics_Click1(object sender, EventArgs e)
79 {
80 Response.Write(count + "----btnGraphics_Click <br/>");
81 }
82 }
83 }

运行结果:
0----OnPreInit
1----OnInit
2----OnInitComplete
3----OnPreLoad
4----Page_Load
5----OnLoad
----Button_Click
6----OnLoadComplete
7----OnPreRender
对应事件分析:
OnPreInit:当调用该方法时,引发PreInit事件。在该事件中主要是应用App_Themes中的主题,与应用母版页,通常这一步我们不需要做什么。
OnInit:初始化页面所应用到的控件,然后将应用的Themes应用给控件,递归的触发子空间的Init方法
OnInitComplete:它的调用标示着初始化完成,所有的控件均已经初始化完毕,所有Themes都已经应用
OnPreLoad:它的调用标示着页面进入加载状态,在该事件中,为自身和所有控件加载视图状态(??),然后会处理Request实例包含所有会发数据
OnLoad:通常用的事件,也就是Page_Load事件,Page_XXX是所有时间的一种事时间链接形式,如Page_Init将调用OnInit方法。这个事件可以处理回发,由于视图状态,Themes,子控件都已经初始化完毕,所以便于我们添加逻辑而不必担心被其他事件把值覆盖 掉。值得注意的是,任何页面的Load顺序是先自己,再子控件,如:一个Aspx页面被调用Load事件,先加载本身,然后再加载如母版页、用户控件、第三方服务器控件等等
OnLoadComplete:标示着所有控件的加载完成。下一步则是将加载内容进行呈现
OnPreRender:该事件处理准备呈现的一些工作。如:对设置了DataSource的控件进行DataBind,通常,我们可以再这个事件上动态修改某些控件的值
OnPreRenderComplete:该事件标志着准备呈现完成,数据已经完成绑定
SaveViewState:该事件中,将序列化ViewState,然后再页面中以一个input:hidden的元素保存试图状态
Render:在这个阶段,框架会调用所有控件的Render方法,进行页面呈现。以生产html页
Unload:在页面生命周期结束后,进行卸载
ASP.NET Page执行顺序(ASP.NET生命周期)的更多相关文章
- ASP.NET Page执行顺序【转】
一.ASP.NET 母版页和内容页中的事件 母版页和内容页都可以包含控件的事件处理程序.对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件.控件事件 ...
- ASP.NET Page执行顺序
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- ASP.NET Page执行顺序如:OnPreInit()、OnInit()……
using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security ...
- ASP.NET Page执行顺序如:OnPreInit()、OnInit()
http://www.cnblogs.com/yeminglong/archive/2012/10/16/2725664.html 当页面进行回发时,如点击按钮,以上事件都会重新执行一次,这时的执行顺 ...
- ASP.NET 页面执行顺序详解
今天整理了一下ASP执行过程,从.net页码的执行周期开始做一个详细的了解.我重写了页面的绝大多数方法.然后加载执行.所得的顺序如下. 方法是每个重写的事件中都输出一个字符,按字符打印出来的先后判断事 ...
- ASP.NET Web 应用程序及页面生命周期
以客户端浏览器向 ASP.NET Web 应用程序页面发送请求(Request)为起点,以浏览器收到 Web 服务器的响应(Response)为终点,这一完整的过程被称为"应用程序及页面的生 ...
- 【深入ASP.NET原理系列】--ASP.NET请求管道、应用程序生命周期、整体运行机制
微软的程序设计和相应的IDE做的很棒,让人很快就能有生产力..NET上手容易,生产力很高,但对于一个不是那么勤奋的人,他很可能就不再进步了,没有想深入下去的动力,他不用去理解整个框架和环境是怎么执行的 ...
- ASP.NET请求管道、应用程序生命周期、整体运行机制
我们知道在ASP.NET中,若要对ASP.NET应用程序进行 初始化并使它处理请求,必须执行一些处理步骤,熟悉应用程序生命周期非常重要,这样才能在适当的生命周期阶段编写代码,达到预期的效果.永远不要做 ...
- ASP.NET 页面执行顺序
1.对象初始化(Onlnit方法) 页面中的控件(包括页面本身)都是在它们最初的form中被首次初始化的,通过在aspx页面的后台代码文件的构造器中声明你的对象,页面将知道对象的类型,并知道需要创建多 ...
随机推荐
- 【例题 6-3 UVA - 442】Matrix Chain Multiplication
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用栈来处理一下表达式就好. 因为括号是一定匹配的.所以简单很多. ab x bc会做abc次乘法. [代码] #include< ...
- [Ramda] Getter and Setter in Ramda & lens
Getter on Object: 1. prop: R.prop(}); //=> 100 R.prop('x', {}); //=> undefined 2. props: R.pro ...
- 移动开发之css3实现背景几种渐变效果
移动端背景渐变,非常的年轻,符合90后年轻一代的审美,css3的这个渐变目前主要是应用在手机前端领域. 产品设计中使用渐变色的好处:1:观众不至于眼睛过于疲劳(如果是浅色背景,3个小时下来极容易造成观 ...
- Bootstrap相关优质项目学习清单
1:编码规范 by @mdo编写灵活.稳定.高质量的 HTML 和 CSS 代码的规范 http://codeguide.bootcss.com/ 2:快速.可靠.安全的依赖管理工具.Yarn 缓存了 ...
- iOS开发之Quartz2D 六 绘制UIImageView
#import <UIKit/UIKit.h> @interface XMGImageView : UIView /** <#注释#> */ @property (nonato ...
- Android 闹钟最终版
以下是我发现的几点闹钟中重要的点,分享一下: (1)在闹钟中有AudioManager管理机制,这个机制可以申请和释放OnAudioFocusChangeListener监听. 还有mTelephon ...
- [Angular Directive] Build a Directive that Tracks User Events in a Service in Angular 2
A @Directive is used to add behavior to elements and components in your application. This makes @Dir ...
- Wow6432Node(32位程序的注册表内容都在这个节点下,也可直接使用%systemroot%\syswow64\regedit进行编辑)
64 位版本 Windows 中的注册表分为 32 位注册表项和 64 位注册表项.许多 32 位注册表项与其相应的 64 位注册表项同名,反之亦然. 64 位版本 Windows 包含的默认 64 ...
- 【39.29%】【codeforces 552E】Vanya and Brackets
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- [Git] Use git add --patch for better commit history and mitigating bugs
Let's split our changes into separate commits. We'll be able to check over our changes before stagin ...