页面生命周期

ASP.NET编程模型之页面生命周期执行一系列步骤:页面的初始化、实例化控件、还原和维护状态、运行事件处理程序代码、呈现。为了在合适的阶段执行所需的代码,所以要对页面生命周期非常熟悉。在页生命周期的各个阶段,页面会逐个引发定义的事件,通过对代码开发,在页面的生命事件中执行我们所需要的程序
页生命周期阶段

1、ASP.NET页面生命周期之页请求:发生在页面生命周期之前,用户请求页时,ASP.NET将确定是否需要分析和编译页,从而确定是否开始页面的生命周期,或者是否可以在不运行页的情况下发送页面缓存以进行响应。

2、ASP.NET页面生命周期之开始:设置页属性,如:HttpContext以及其他属性;在此阶段,页面需要确定是回发请求还是新请求,并设置IsPostBack属性;设置页面的UICulture属性。

3、 ASP.NET页面生命周期之页面初始化:加载所有主题;控件生成,并设置UniqueID;

注:ViewState、ControlState中的值还未加载至控件;如果页面是回发,则回发数据也还未加载;故此时控件可以访问,但值可能出错。

4、ASP.NET页面生命周期之加载:如果当前请求是回发请求,则为控件加载ViewState和ControlState中的值。

5、ASP.NET页面生命周期之验证:调用所有验证程序控件的Validate方法,此方法将设置验证程序控件和页的IsValid属性。

6、ASP.NET页面生命周期之回发事件处理:如果请求是回发请求,则调用所有事件处理程序。

7、ASP.NET页面生命周期之呈现:首先对该页和所有控件进行保存视图状态,然后对每个控件调用Render方法,它会提供一个文本编写器,用于将控件的输入写入页的Response属性的OutputStream中。

8、ASP.NET页面生命周期之卸载:完成呈现,并已将页发送至客户端、准备丢弃该页后,调用卸载。将卸载属性如:Response和Request等等。

  关于具有master 的asp.net的页面生成周期,我们可以通过下面的例子可以清楚的看出其页面时间的执行顺序。
master页面代码
public partial class Site : System.Web.UI.MasterPage
    {
        protected void Page_PreInit(object sender, EventArgs e)
        {
            Response.Write("MasterPage_PreInit<br/>");
        }
        protected void Page_Init(object sender, EventArgs e)
        {
            Response.Write("MasterPage_Init<br/>");
        }
        protected void Page_InitComplete(object sender, EventArgs e)
        {
            Response.Write("MasterPage_InitComplete<br/>");
        }
        protected void Page_PreLoad(object sender, EventArgs e)
        {
            Response.Write("MasterPage_PreLoad<br/>");
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("MasterPage_Load<br/>");
        }
        protected void Page_LoadComplete(object sender, EventArgs e)
        {
            Response.Write("MasterPage_LoadComplete<br/>");
        }
        protected void Page_PreRender(object sender, EventArgs e)
        {
            Response.Write("MasterPage_PreRender<br/>");
        }
        protected void Page_PreRenderComplete(object sender, EventArgs e)
        {
            Response.Write("MasterPage_PreRenderComplete<br/>");
        }
        protected void Page_SaveStateComplete(object sender, EventArgs e)
        {
            Response.Write("MasterPage_SaveStateComplete<br/>");
        }
        protected void Page_Unload(object sender, EventArgs e)
        {
            //Response.Write("MasterPage_Unload<br/>");
            int i = 0;
            i++;//这行代码是用来设置断点的,这里不能用Response.Write
        }

页面代码:
protected void Page_PreInit(object sender, EventArgs e)
        {
            Response.Write("Page_PreInit<br/>");
        }
        protected void Page_Init(object sender, EventArgs e)
        {
            Response.Write("Page_Init<br/>");
        }
        protected void Page_InitComplete(object sender, EventArgs e)
        {
            Response.Write("Page_InitComplete<br/>");
        }
        protected void Page_PreLoad(object sender, EventArgs e)
        {
            Response.Write("Page_PreLoad<br/>");
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("Page_Load<br/>");
        }
        protected void Page_LoadComplete(object sender, EventArgs e)
        {
            Response.Write("Page_LoadComplete<br/>");
        }
        protected void Page_PreRender(object sender, EventArgs e)
        {
            Response.Write("Page_PreRender<br/>");
        }
        protected void Page_PreRenderComplete(object sender, EventArgs e)
        {
            Response.Write("Page_PreRenderComplete<br/>");
        }
        protected void Page_SaveStateComplete(object sender, EventArgs e)
        {
            Response.Write("Page_SaveStateComplete<br/>");
        }
        protected void Page_Unload(object sender, EventArgs e)
        {
            //Response.Write("Page_Unload<br/>");
            int i = 0;
            i++;//这行代码是用来设置断点的,这里不能用Response.Write
        }   
   protected void Button2_Click(object sender, EventArgs e)
        {
            Response.Write("Button事件触发!<br/>");
        }

运行后输出:
Page_PreInit
MasterPage_Init
Page_Init
Page_InitComplete
Page_PreLoad
Page_Load
MasterPage_Load
Page_LoadComplete
Page_PreRender
MasterPage_PreRender
Page_PreRenderComplete
Page_SaveStateComplete

点击按钮后输出:
Page_PreInit
MasterPage_Init
Page_Init
Page_InitComplete
Page_PreLoad
Page_Load
MasterPage_Load
Button事件触发!
Page_LoadComplete
Page_PreRender
MasterPage_PreRender
Page_PreRenderComplete
Page_SaveStateComplete

原文地址:https://www.cnblogs.com/jasonwb/p/1851850.html