ASP.NET生命周期详解(转)

(1)请求页面:页请求发生在页生命周期开始之前。

(2)开始:在开始阶段,将设置页属性,如Request和Response。在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack属性。

(3)初始化页面:页面初始化期间,可以使用页中的控件,并将设置每个控件的UniqueID属性。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。

(4)加载页面:加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性。

(5)验证:在验证期间,将调用所有验证程序控件的Validate方法,此方法将设置各个验证程序控件和页的IsValid属性。

(6)回发事件处理:如果请求是回发请求,则将调用所有事件处理程序。

(7)呈现页面:在页面呈现期间,视图状态将被保存到页面,然后页面将调用每个控件,以将其呈现的输出提供给页的Response属性的OutputStream。

(8)卸载页面:完全呈现页、将页发送至客户端并准备丢弃时,将调用卸载。此时,将卸载页属性(如Response和Request)并执行清理。

与上面的生命周期相对应的Page类的生命周期事件如图所示。

Page类生命周期中各个事件的说明如表所示。

事 件

说 明

Init

当服务器控件初始化时发生;初始化是控件生存期的第一步

InitComplete

在页初始化完成时发生

PreInit

在页初始化开始时发生

Load

当服务器控件加载到Page对象中时发生

LoadComplete

在页生命周期的加载阶段结束时发生

PreLoad

在页Load事件之前发生

PreRender

在页面加载控件对象之后、呈现之前发生

PreRenderComplete

在呈现页内容之前发生

UnLoad

当服务器控件从内存中卸载时发生

Disposed

当从内存释放服务器控件时发生,这是服务器控件生存期的最后阶段

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
public partial class _Default : System.Web.UI.Page
  {
      protected int i = 1;
   
      protected void Page_PreInit(object sender, EventArgs e)
      {
          Response.Write(i + ".PreInit:当页面初始化开始时发生");
          i++;
          Response.Write("<br>");
     }
  
     protected void Page_Init(object sender, EventArgs e)
     {
         Response.Write(i + ".Init:当服务器空间初始化时发生");
         i++;
         Response.Write("<br>");
     }
 
     protected void Page_InitComplete(object sender, EventArgs e)
     {
         Response.Write(i + ".InitComplete:当页初始化完成时发生");
         i++;
         Response.Write("<br>");
     }
  
     protected void Page_PreLoad(object sender, EventArgs e)
     {
         Response.Write(i + ".PreLoad:当页load事件前发生");
         i++;
         Response.Write("<br>");
     }
  
     protected void Page_Load(object sender, EventArgs e)
     {
         Response.Write(i + ".Load:当服务器控件加载到Page对象中时发生(加载页面时)");
         i++;
         Response.Write("<br>");
       
       //在Load和LoadComplete之间会执行控件事件.
       //如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。
     }
  
     protected void Page_LoadComplete(object sender, EventArgs e)
     {
         Response.Write(i + ".LoadComplete:当页面生命周期的加载阶段结束时发生");
         i++;
         Response.Write("<br>");
     }
  
     protected void Page_PreRender(object sender, EventArgs e)
     {
         Response.Write(i + ".PreRender:当页加载控件之后,呈现之前发生,使用该事件对页或其控件的内容进行最后更改(预呈现)");
         i++;
         Response.Write("<br>");
     }
     protected void Page_PreRenderComplete(object sender, EventArgs e)
     {
         Response.Write(i + ".PreRenderComplete:呈现内容前发生.(预呈现完成)");
        i++;
         Response.Write("<br>");
     }
     protected void Page_SaveStateComplete(object sender, EventArgs e)
     {
         /*网页上控件的状态信息是在 PreRenderComplete 事件后保存的。
        在SaveStateComplete事件之前用Trace查看页时其实在该事件前还有
        一个SaveState事件,只是这里无法演示.
         
        注意:SaveStateComplete 事件在将页和页上控件的视图状态和控件状态保存到持久性介质之后引发。
        这是在页被呈现到请求浏览器之前引发的最后一个事件。*/
  
         Response.Write(i + ".SaveStateComplete:在页已完成对页和页上控件的所有视图状态和控件状态信息的保存后发生.");
         i++;
         Response.Write("<br>");
  
        /*最后一部操作
         呈现:Render:
         它不是事件;在处理的这个阶段,Page 对象会在每个控件上调用此方法Render()。
         所有 ASP.NET Web 服务器控件都有一个用于写出发送给浏览器的控件标记的 Render 方法。*/
  
  
         /*当你关闭页面的时候就会引发UnLoad(当服务器控件从内存中卸载时发生)
          和Disposed两事件(当从内存释放服务器控件时发生,这是服务器控件生存期的最后阶段)
          
         首先加载UnLoad事件:卸载页面:完全呈现页、将页发送至客户端并准备丢弃时,
         将调用卸载。此时,将卸载页属性(如Response和Request)并执行清理.
           
         最后加载Disposed事件,释放资源,生命周期结束....
         */
     }
 }
结果

Trace图:

作者:【唐】三三

出处:https://www.cnblogs.com/tangge/archive/2011/09/03/2165424.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   【唐】三三  阅读(309)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示