ASP.NET页面生命周期的解释

我被要求在一段时间的采访中解释ASP.NET页面的生命周期。 我曾向他解释过,但他对我的回答并不满意。 有人可以向我解释生命周期吗?

你可以看到:

  1. ASP.NET页面生命周期图 ,

  2. ASP.NET页面生命周期 (Solomon Shaffer)

  3. 微软开发者networking

在ASP.NET页面生命周期中有10个事件,顺序是:Init,Load视图状态,PostBackdata,Load,Validate,Event,预渲染,保存视图状态,Render和Unload。

下面是ASP.NET页面生命周期的graphics视图,预期在这种情况下会有什么样的代码。 我build议你阅读这篇关于ASP.NET页面生命周期的文章,详细解释所有10个事件以及何时使用它们。

在这里输入图像描述

我认为微软已经做了这个最好的工作。 我只是总结他们的总结,拉出每个事件的最重要的部分。

ASP.NET页面生命周期概述

我从MSDN推荐这个页面:

ASP.NET页面生命周期概述

答案已由其他人发布。 只是共享快捷方式代码,以记住我在下面的post中遇到的生命周期阶段。

R-SIL-VPRU

  1. 请求
  2. 开始
  3. 初始化
  4. 加载
  5. validation
  6. 后处理
  7. 渲染
  8. 卸下

    如何以简单的方式记住asp.net页面的生命周期

ASP.Net页面生命周期概述

当一个ASP.Net页面运行时,页面会经历一个生命周期,其中ir执行一系列的处理步骤。 这些包括

  • 初始化
  • 实例化控件
  • 恢复和维护状态
  • 运行事件处理程序代码和
  • 渲染

为什么我们需要学习ASP.Net页面的生命周期?

了解页面生命周期对于您来说非常重要,以便您可以在适当的生命周期阶段编写代码,以获得所需的效果。

如果您开发自定义控件,则必须熟悉tha页面生命周期才能正确初始化控件,填充控件行为代码。 控件的生命周期是基于页面生命周期,页面引发了许多您需要在自定义控件中处理的事件。

一般页面生命周期统计:

生命周期的某些部分仅在页面作为回发进行处理时才会发生。 对于回发,页面生命周期在部分回发期间(如当您使用更新面板控件时)与完整页面回发期间相同。

  1. 页面请求
  2. 开始
  3. 初始化
  4. 加载
  5. 回发事件处理
  6. 渲染
  7. 卸下

1)。 页面请求:

页面请求在页面生命周期开始之前发生。 当用户请求页面时,ASP.Net将确定页面是否需要parsing和编译(因此开始pge的生命周期),或者是否可以在不运行页面的情况下发送caching版本的页面作为响应。

在这里阅读关于“ASP.Net页面生命周期概述”的完整文章。

PreInit:

您可以:

检查IsPostBack属性以确定这是否是第一次处理页面。 创build或重新创builddynamic控件。 dynamic设置母版页。 dynamic设置主题属性。 读取或设置configuration文件属性值。 如果请求是回发:

控件的值尚未从视图状态恢复。 如果在此阶段设置控件属性,则在下一个事件中可能会覆盖其值。 在里面:

在Init事件中,首先发生各个控件,然后发生页面的Init事件。 此事件用于初始化控件属性。 InitComplete:

在这个事件中,ViewState的跟踪被打开。 即使在下一次回传之后,在这个事件中对ViewState所做的任何更改都会被保留。 预载:

此事件处理请求中包含的回发数据。 加载:

在这种情况下,Page对象调用页面对象本身的OnLoad方法,稍后将调用控件的OnLoad方法。 因此单个控件的Load事件发生在页面的Load事件之后。 ControlEvents:

此事件用于处理特定的控件事件,如Button控件的Click事件或TextBox控件的TextChanged事件。 在回传的情况下:

如果页面包含validation器控件,则Page.IsValid属性和控件validation发生在单个控件事件触发之前。 LoadComplete:

此事件发生在事件处理阶段之后。 此事件用于加载页面上的所有其他控件等任务。 预渲染:

在这种情况下,页面的PreRender事件首先被调用,然后调用子控件。 用法:

此方法用于对页面上的控件进行最终更改,如分配DataSourceId和调用DataBind方法。 PreRenderComplete:

在每个控件的PreRender属性完成后引发此事件。 SaveStateComplete:

在页面和所有控件的控制状态和视图状态都被保存之后,会引发这个事件。 RenderComplete:

页面对象在页面上的每个控件上调用此方法。 此方法写入控件的标记将其发送到浏览器。 卸下:

为每个控件然后为页面对象引发此事件。 用法:

在控件中使用此事件进行最终清理工作,例如closures打开的数据库连接,closures打开的文件等

Partial Class _Default Inherits System.Web.UI.Page Dim str As String Protected Sub Page_Disposed(sender As Object, e As System.EventArgs) Handles Me.Disposed str += "PAGE DISPOSED" & "<br />" End Sub Protected Sub Page_Error(sender As Object, e As System.EventArgs) Handles Me.Error str += "PAGE ERROR " & "<br />" End Sub Protected Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init str += "PAGE INIT " & "<br />" End Sub Protected Sub Page_InitComplete(sender As Object, e As System.EventArgs) Handles Me.InitComplete str += "INIT Complte " & "<br />" End Sub Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load str += "PAGE LOAD " & "<br />" End Sub Protected Sub Page_LoadComplete(sender As Object, e As System.EventArgs) Handles Me.LoadComplete str += "PAGE LOAD Complete " & "<br />" End Sub Protected Sub Page_PreInit(sender As Object, e As System.EventArgs) Handles Me.PreInit str = "" str += "PAGE PRE INIT" & "<br />" End Sub Protected Sub Page_PreLoad(sender As Object, e As System.EventArgs) Handles Me.PreLoad str += "PAGE PRE LOAD " & "<br />" End Sub Protected Sub Page_PreRender(sender As Object, e As System.EventArgs) Handles Me.PreRender str += "PAGE PRE RENDER " & "<br />" End Sub Protected Sub Page_PreRenderComplete(sender As Object, e As System.EventArgs) Handles Me.PreRenderComplete str += "PAGE PRE RENDER COMPLETE " & "<br />" End Sub Protected Sub Page_SaveStateComplete(sender As Object, e As System.EventArgs) Handles Me.SaveStateComplete str += "PAGE SAVE STATE COMPLTE " & "<br />" lbl.Text = str End Sub Protected Sub Page_Unload(sender As Object, e As System.EventArgs) Handles Me.Unload 'Response.Write("PAGE UN LOAD\n") End Sub End Class