zoukankan      html  css  js  c++  java
  • 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 }
    View Code

    运行结果:

    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:在页面生命周期结束后,进行卸载

  • 相关阅读:
    POJ 3280 Cheapest Palindrome
    POJ 1191 棋盘分割
    POJ 1260 Pearls
    HDOJ 4731 Minimum palindrome
    2013 ACM/ICPC Asia Regional Chengdu Online 1004 Minimum palindrome
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    POJ 1276 Cash Machine
    POJ 1837 Balance
    HDU 4554 叛逆的小明
  • 原文地址:https://www.cnblogs.com/chenls/p/5307717.html
Copyright © 2011-2022 走看看