ASP.NET 页生命周期事件

事件名

典型使用

PreInit

在启动阶段完成之后、初始化阶段开始之前引发。

使用该事件来执行下列操作:

  • 检查 IsPostBack 属性来确定是不是第一次处理该页。此时还设置了 IsCallbackIsCrossPagePostBack 属性。

  • 创建或重新创建动态控件。

  • 动态设置主控页。

  • 动态设置 Theme 属性。

  • 读取或设置配置文件属性值。

    注意注意

    如果请求是回发请求,则控件的值尚未从视图状态还原。如果在此阶段设置控件属性,则其值可能会在下一事件中被覆盖。






Init

在所有控件都已初始化且已应用所有外观设置后引发。各个控件的 Init 事件在页的 Init 事件之前发生。

使用该事件来读取或初始化控件属性。

InitComplete

在页的初始化阶段结束时引发。InitInitComplete 事件之间仅发生一个操作:开启对视图状态更改的跟踪。视图状态跟踪使控件可以保留所有以编程方式添加到 ViewState 集合的值。在开启视图状态跟踪之前,所有添加到视图状态的值都会在回发期间丢失。控件通常在引发其 Init 事件后立即开启视图状态跟踪。

使用此事件对要在下一个回发后务必保留的视图状态进行更改。

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

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

使用 OnLoad 事件方法来设置控件中的属性并建立数据库连接。

控件事件 使用这些事件来处理特定控件事件,如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。
LoadComplete

在事件处理阶段结束时引发。

对需要加载页上的所有其他控件的任务使用该事件。

PreRender

Page 对象创建呈现页所需的所有控件(包括组合控件的子控件)之后引发。(为此,Page 对象会针对每个控件和页调用 EnsureChildControls。)

Page 对象在 Page 对象上调用 PreRender 事件,然后以递归方式对每个子控件执行相同操作。各个控件的 PreRender 事件在页的 PreRender 事件之后发生。

在呈现阶段开始之前,使用该事件对页或其控件的内容进行最后更改。

使用该事件在服务器控件呈现给页之前执行任何更新。在该事件的生存期内可以保存服务器控件视图状态的任何更改。不保存呈现阶段内所做的同样更改。
PreRenderComplete 在设置了 DataSourceID 属性的每个数据绑定控件调用其 DataBind 方法之后引发。有关更多信息,请参见本主题后面的数据绑定控件的数据绑定事件

SaveStateComplete
在为页和所有控件保存视图状态和控件状态之后发生。此时对页或控件进行的任何更改都会影响呈现,但是在下一个回发中将不会检索到这些更改
Render

这不是事件;在处理的这个阶段,Page 对象会在每个控件上调用此方法。所有 ASP.NET Web 服务器控件都有一个用于写出发送给浏览器的控件标记的 Render 方法。

如果创建自定义控件,通常要覆盖此方法以输出控件的标记。不过,如果自定义控件只合并标准的 ASP.NET Web 服务器控件,不合并自定义标记,则不需要覆盖 Render 方法。有关更多信息,请参见开发自定义 ASP.NET 服务器控件

用户控件(.ascx 文件)自动合并呈现,因此不需要在代码中显式呈现该控件。

Unload

首先针对每个控件引发,继而针对该页引发。

在控件中,使用该事件对特定控件执行最后清理,如关闭控件特定数据库连接。

对于页自身,使用该事件来执行最后清理工作,如:关闭打开的文件和数据库连接,或完成日志记录或其他请求特定任务。

注意注意

在卸载阶段,页及其控件已被呈现,因此无法对响应流做进一步更改。如果尝试调用方法(如 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_Load(object sender, EventArgs e)
    {

     
        Response.Write("Page_Load" + "<br/>");
    }


    protected void Page_PreRender(object sender, EventArgs e)
    {
        Response.Write("Page_PreRender" + "<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_LoadComplete(object sender, EventArgs e)
    {
        Response.Write("Page_LoadComplete" + "<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/>"); 使用response.write 将引发异常

    }
    protected void Button1_Click(object sender, EventArgs e)
    {

    }
    protected void Button1_Init(object sender, EventArgs e)
    {
        Response.Write("服务器控件_Init" + "<br/>");
    }


    protected void Button1_Load(object sender, EventArgs e)
    {
        Response.Write("服务器控件_Load" + "<br/>");
    }
    protected void Button1_PreRender(object sender, EventArgs e)
    {
        Response.Write("服务器控件_PreRender" + "<br/>");
    }
    protected void Button1_Unload(object sender, EventArgs e)
    {

    }

 

效果:

 

image

 

测试gridview绑定数据需要的时间

前台代码

<form id="form1" runat="server">
    <div>
    <ss:uc runat="server" ID="sss" />
    <input type="text" />
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" 
            oninit="Button1_Init" onload="Button1_Load" onprerender="Button1_PreRender" 
            onunload="Button1_Unload" />

    </div>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        EmptyDataText="没有可显示的数据记录。" ondatabinding="GridView1_DataBinding" 
        ondatabound="GridView1_DataBound" oninit="GridView1_Init">
        <Columns>
            <asp:BoundField DataField="id" HeaderText="id" ReadOnly="True" SortExpression="id" />
            <asp:BoundField DataField="name" HeaderText="name" SortExpression="name" />
        </Columns>
    </asp:GridView>
   
    </form>

后台代码:

 protected void Page_PreInit(object sender, EventArgs e)
    {

        Response.Write("Page_PreInit" +"--time:"+ DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");


       
    }


    protected void Page_Init(object sender, EventArgs e)
    {

        Response.Write("Page_Init" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");

    }
    protected void Page_Load(object sender, EventArgs e)
    { Response.Write("Page_Load" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");
 
        SqlDataAdapter da = new SqlDataAdapter("select * from Table_1", ConfigurationManager.ConnectionStrings["testConnectionString1"].ToString());

        DataSet ds = new DataSet();
        da.Fill(ds);
        GridView1.DataSource = ds;
        GridView1.DataBind();

          }


    protected void Page_PreRender(object sender, EventArgs e)
    {
        Response.Write("Page_PreRender" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");

    }

    protected void Page_InitComplete(object sender, EventArgs e)
    {
        Response.Write("Page_InitComplete" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");

    }
    protected void Page_PreLoad(object sender, EventArgs e)
    {
        Response.Write("Page_PreLoad" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");

    }
    protected void Page_LoadComplete(object sender, EventArgs e)
    {
        Response.Write("Page_LoadComplete" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");

    }
    protected void Page_PreRenderComplete(object sender, EventArgs e)
    {
        Response.Write("Page_PreRenderComplete" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");

    }
    protected void Page_SaveStateComplete(object sender, EventArgs e)
    {
        Response.Write("Page_SaveStateComplete" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");

    }
    protected void Page_Unload(object sender, EventArgs e)
    {

        //  Response.Write("Page_Unload" + "<br/>"); 使用response.write 将引发异常

    }
    protected void Button1_Click(object sender, EventArgs e)
    {

    }
    protected void Button1_Init(object sender, EventArgs e)
    {
        Response.Write("服务器控件_Init" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");
    }


    protected void Button1_Load(object sender, EventArgs e)
    {
        Response.Write("服务器控件_Load" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");
    }
    protected void Button1_PreRender(object sender, EventArgs e)
    {
        Response.Write("服务器控件_PreRender" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");
    }
    protected void Button1_Unload(object sender, EventArgs e)
    {

    }
    protected void GridView1_Init(object sender, EventArgs e)
    {
        Response.Write("grid 初始化开始" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");
    }
    protected void GridView1_DataBinding(object sender, EventArgs e)
    {
        Response.Write("grid要绑定数据了" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");
    }
    protected void GridView1_DataBound(object sender, EventArgs e)
    {
        Response.Write("grid 数据绑定完毕了!" + "--time:" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm----ssfff") + "<br/>");
    }

效果:

image

posted @ 2012-05-02 16:39  高捍得  阅读(320)  评论(1编辑  收藏  举报