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();
            
        }
    }
  • 相关阅读:
    BBB-media配置
    BBB-添加文章及文章中图片
    inclusion_tag模块
    BBB-登录注册
    Django-auth模块
    Django-csrf中间件
    基于django中settings中间件源码思想,实现功能的插拔式设计
    Django之中间件
    Django之cookie与session
    java中public与private还有protect的区别
  • 原文地址:https://www.cnblogs.com/lvjianwei/p/2574129.html
Copyright © 2011-2022 走看看