ASP.NET 生命周期

1     常规页生命周期

生命周期:页面请求->启动->初始化->加载->回发事件处理->呈现->卸载。

页生命周期

页面请求

页面请求发生在页生命周期前。用户请求时,ASP.NET将确定是否需要分析和编译页,或者可以在不运行页的情况下发送缓存版本进行相应。

启动

启动阶段,将设置页的属性,如Request和Response。在此阶段,页还将确定是回发请求还是新请求,并设置IsPostBack属性,以及UICulture属性。

初始化

该时期可以使用页中的控件,并设置控件的UniqueID。如果需要,还会应用母版页和主题。如果当前请求时回发请求,此时回发数据还未加载,还是页面还是原来的值。

加载

如果是当前请求时回发请求,则将使用从视图状态和控件状态恢复的的信息加载控件属性。

回发事件处理

如果是回发请求,则调用控件事件处理程序。之后,将调用所有验证程序控件的Validate方法。

呈现

在呈现前会针对该页和所有控件保存视图状态。在呈现阶段,页会针对每个控件调用Render方法(使用HttpTextWriter),它会提供一个文本编辑器,用于将控件的输出写入页的Response属性和OutputStream对象中。

卸载

完全呈现页并将页发送到客户端、准备丢弃该页后,引发unload事件。此时,将卸载页属性并执行清理。

2     生命周期事件

在生命周期的每个阶段中,页将引发相应的事件。对于空间事件,   既可以通过声明方式使用特性(如Onclick)或使用代码的方式,将事件处理程序绑定到事件。此外,页还支持自动事件连接,即ASP.NET    将查找具有特定名称的方法,并在引发了特定事件时自动运行这些方法。

常用页事件

PreInit

在启动完成后,初始化开始前引发。

Init

在所有控件完成初始化且以应用所有围观设置后引发。

InitComplete

在页初始化结束后引发。Init和InitComplete事件之间仅发生一个操作:开启对视图状态更改的追踪。使用此事件对要在下一个回发后务必保留的视图状态进行更改。*

PreLoad

在页为自身和所有控件加载视图状态后以及处理Request实例包括的回发数据之后引发。

Load

Page对象对Page对象调用Onload方法,然后以递归的方式对每个子控件执行相同操作,直到加载完本页的所有控件为止。各控件的Load时间在页的Load事件之后发生。

LoadComplete

在事件处理阶段结束时引发。对需要加载页上的所有其他控件的任务使用该事件。

PreRender

在page创建用来呈现页的全部控件后引发。递归调用,类似Load。

PreRender

在设置了DataSourceID属性的每个数据绑定控件调用DataBind方法后引发。

SaveStateComplete

在为页和所有控件保存视图状态和控件状态后引发。

Unload

首先针对每个控件引发,继而针对该页引发。主要用来执行最后的清理。

*视图状态跟踪使控件可以保留所有以编程方式添加到ViewState集合的值。在开启视图状态跟踪前,所有添加到视图状态的值都会在回发期间丢失。

LifeCycleDemo.aspx
 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LifeCycleDemo.aspx.cs" Inherits="ASP.NetDemo.LifeCycleDemo" %>
 2 
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4 
 5 <html xmlns="http://www.w3.org/1999/xhtml">
 6 <head runat="server">
 7     <title></title>
 8 </head>
 9 <body>
10     <form id="form1" runat="server">
11     <div>
12         <asp:Label runat="server" ID="labControl" OnLoad="Control_Load" OnUnload="Control_Unload">Label Control Test</asp:Label>
13         <asp:TextBox runat="server" ID="tbControl"></asp:TextBox>
14         <asp:Label runat="server" ID="labBeforeInit"></asp:Label>
15         <asp:Label runat="server" ID="labOnInit"></asp:Label>
16         <asp:Label runat="server" ID="labInitComplete"></asp:Label>
17 
18     </div>
19     <div>
20         <asp:Button runat="server" ID="btnRefresh" Text="Refresh" OnClick="Refresh_Click" />
21         <asp:Button runat="server" ID="btnRedirect" Text="To Default Page" OnClick="Redirect_Click" />
22     </div>
23     </form>
24 </body>
25 </html>
LifeCycleDemo.aspx.cs
  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 ASP.NetDemo
  9 {
 10     public partial class LifeCycleDemo : System.Web.UI.Page
 11     {
 12         Label tmpLabel;
 13 
 14       
 15         protected void Refresh_Click(object sender, EventArgs e)
 16         {
 17             Log.WriteLog("Click refresh button." + e.GetType().ToString(), DateTime.Now.ToString());
 18         }
 19 
 20         protected void Redirect_Click(object sender, EventArgs e)
 21         {
 22 
 23             Log.WriteLog("Redirect to Default page", DateTime.Now.ToString());
 24             Response.Redirect("Default.aspx");
 25         }
 26 
 27         //PreInit Event
 28         protected void Page_PreInit(object sender, EventArgs e)
 29         {
 30             InitLabel("This is PreInit Event!<br>");
 31             Log.WriteLog("******", "******");
 32             Log.WriteLog("Life Cycle Begin!", DateTime.Now.ToString());
 33             Log.WriteLog("PreInit", DateTime.Now.ToString());
 34             labBeforeInit.Text = tbControl.Text;
 35         }
 36 
 37         //Init Event
 38         protected void Page_Init(object sender, EventArgs e)
 39         {
 40             InitLabel("This is Init Event!<br>");
 41             Log.WriteLog("Init", DateTime.Now.ToString());
 42             labOnInit.Text = tbControl.Text;
 43         }
 44 
 45         //InitComplete Evet
 46         protected void Page_InitComplete(object sender, EventArgs e)
 47         {
 48             InitLabel("This is InitComplete Event!<br>");
 49             Log.WriteLog("InitComplete", DateTime.Now.ToString());
 50             labInitComplete.Text = tbControl.Text;
 51         }
 52 
 53         //PreLoad Event
 54         protected void Page_PreLoad(object sender, EventArgs e)
 55         {
 56             InitLabel("This is PreLoad Event!<br>");
 57             Log.WriteLog("PreLoad", DateTime.Now.ToString());
 58         }
 59 
 60         //Page Load Event
 61         protected void Page_Load(object sender, EventArgs e)
 62         {
 63             InitLabel("This is Load Event!<br>");
 64             Log.WriteLog("Page Load", DateTime.Now.ToString());
 65         }
 66 
 67         //Control Load Event
 68         protected void Control_Load(object sender, EventArgs e)
 69         {
 70             Log.WriteLog("Control Load", DateTime.Now.ToString());
 71         }
 72 
 73         //LoadComplete Event
 74         protected void Page_LoadComplete(object sender, EventArgs e)
 75         {
 76             InitLabel("This is LoadComplete Event!<br>");
 77             Log.WriteLog("LoadComplete", DateTime.Now.ToString());
 78         }
 79 
 80         //PreRender Event
 81         protected void Page_PreRender(object sender, EventArgs e)
 82         {
 83             InitLabel("This is PreRender Event!<br>");
 84             Log.WriteLog("PreRender", DateTime.Now.ToString());
 85         }
 86 
 87         //PreRenderComplete Event
 88         protected void Page_PreRenderComplete(object sender, EventArgs e)
 89         {
 90             InitLabel("This is PreRenderComplete Event!<BR>");
 91             Log.WriteLog("PreRenderComplete", DateTime.Now.ToString());
 92         }
 93 
 94         //SaveStateComplete Event
 95         protected void Page_SaveStateComplete(object sender, EventArgs e)
 96         {
 97             InitLabel("This is SaveStateComplete Event!<br>");
 98             Log.WriteLog("SaveStateComplete", DateTime.Now.ToString());
 99         }
100 
101         //Page Unload Event
102         private void Page_Unload(object sender, EventArgs e)
103         {
104             Log.WriteLog("Page Unload", DateTime.Now.ToString());
105             Log.WriteLog("none", "none");
106         }
107 
108         //Control Unload Event
109         protected void Control_Unload(object sender, EventArgs e)
110         {
111             Log.WriteLog("Control Unload", DateTime.Now.ToString());
112         }
113 
114 
115 
116         private void InitLabel(string eventInfo)
117         {
118             this.tmpLabel = new Label();
119             tmpLabel.Text = eventInfo;
120             Page.Controls.Add(tmpLabel);
121 
122         }
123     }
124 }
Log.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.IO;

/// <summary>
///Log 的摘要说明
/// </summary>
public class Log
{
    public static void WriteLog(string eventType,string time)
    {
        string path = AppDomain.CurrentDomain.BaseDirectory + "Log.txt";
        StringBuilder str = new StringBuilder();
        str.Append("Time:"+time+"------EventType:"+eventType);
        StreamWriter sw;
        if (!File.Exists(path))
        {
            sw = File.CreateText(path);
        }
        else
        {
            sw = File.AppendText(path);
        }
        sw.WriteLine(str.ToString());
        sw.Close();
        
    }
}
原文地址:https://www.cnblogs.com/lvjianwei/p/2574129.html