zoukankan      html  css  js  c++  java
  • 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();
            
        }
    }
  • 相关阅读:
    28完全背包+扩展欧几里得(包子凑数)
    HDU 3527 SPY
    POJ 3615 Cow Hurdles
    POJ 3620 Avoid The Lakes
    POJ 3036 Honeycomb Walk
    HDU 2352 Verdis Quo
    HDU 2368 Alfredo's Pizza Restaurant
    HDU 2700 Parity
    HDU 3763 CDs
    POJ 3279 Fliptile
  • 原文地址:https://www.cnblogs.com/lvjianwei/p/2574129.html
Copyright © 2011-2022 走看看