📜  ASP.NET-生命周期

📅  最后修改于: 2020-11-21 05:39:07             🧑  作者: Mango


ASP.NET生命周期指定如何:

  • ASP.NET处理页面以产生动态输出
  • 该应用程序及其页面被实例化并处理
  • ASP.NET动态编译页面

ASP.NET生命周期可以分为两类:

  • 应用生命周期
  • 页面生命周期

ASP.NET应用程序生命周期

应用程序生命周期包括以下阶段:

  • 用户发出访问应用程序资源(页面)的请求。浏览器将此请求发送到Web服务器。

  • 统一管道接收第一个请求,然后发生以下事件:

    • 将创建类ApplicationManager的对象。

    • 创建HostingEnvironment类的对象以提供有关资源的信息。

    • 将编译应用程序中的顶级项目。

  • 响应对象已创建。创建并初始化了诸如HttpContext,HttpRequest和HttpResponse的应用程序对象。

  • 创建HttpApplication对象的实例并将其分配给请求。

  • 该请求由HttpApplication类处理。此类引发不同的事件以处理请求。

ASP.NET页面生命周期

请求页面时,该页面将被加载到服务器内存中,进行处理并发送到浏览器。然后将其从内存中卸载。在每个步骤中,方法和事件都是可用的,可以根据应用程序的需要将其覆盖。换句话说,您可以编写自己的代码来覆盖默认代码。

Page类创建页面上所有控件的分层树。除指令外,页面上的所有组件都是此控制树的一部分。您可以通过在页面指令中添加trace =“ true”来查看控制树。我们将在“指令”和“事件处理”下介绍页面指令和跟踪。

页面生命周期阶段为:

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

了解页面周期有助于编写代码,使某些特定的事情在页面生命周期的任何阶段发生。它还有助于编写自定义控件并在适当的时候对其进行初始化,并用视图状态数据填充其属性并运行控件行为代码。

以下是ASP.NET页的不同阶段:

  • 页面请求-当ASP.NET获得页面请求时,它决定是解析和编译页面,还是存在页面的缓存版本;因此,发送响应。

  • 页面生命周期的开始-在此阶段,设置请求和响应对象。如果请求是旧请求或回发,则页面的IsPostBack属性设置为true。页面的UICulture属性也已设置。

  • 页面初始化-在此阶段,通过设置UniqueID属性为页面上的控件分配唯一ID,并应用主题。对于新请求,将加载回发数据,并将控件属性还原为视图状态值。

  • 页面加载-在此阶段,使用视图状态和控件状态值设置控件属性。

  • 验证-验证控件的Validate方法被调用,并在其成功执行后将页面的IsValid属性设置为true。

  • 回发事件处理-如果请求是回发(旧请求),则调用相关的事件处理程序。

  • 页面渲染-在此阶段,将保存页面和所有控件的查看状态。该页面为每个控件调用Render方法,并且呈现的输出被写入页面的Response属性的OutputStream类。

  • 卸载-呈现的页面被发送到客户端,页面属性(例如Response和Request)被卸载并完成所有清理。

ASP.NET页面生命周期事件

在页面生命周期的每个阶段,页面都会引发一些事件,可以将其编码。事件处理程序基本上是使用声明性属性(例如Onclick或handle)绑定到事件的函数或子例程。

以下是页面生命周期事件:

  • PreInit -PreInit是页面生命周期中的第一个事件。它检查IsPostBack属性,并确定页面是否为回发。它设置主题和母版页,创建动态控件,并获取和设置配置文件属性值。可以通过重载OnPreInit方法或创建Page_PreInit处理程序来处理此事件。

  • Init -Init事件初始化控件属性,并构建控件树。可以通过重载OnInit方法或创建Page_Init处理程序来处理此事件。

  • InitComplete -InitComplete事件允许跟踪视图状态。所有控件都打开视图状态跟踪。

  • LoadViewState -LoadViewState事件允许将视图状态信息加载到控件中。

  • LoadPostData-在此阶段,将使用

    标记定义所有输入字段的内容。

  • PreLoad -PreLoad在将回发数据加载到控件中之前发生。可以通过重载OnPreLoad方法或创建Page_PreLoad处理程序来处理此事件。

  • 加载-首先为页面引发Load事件,然后为所有子控件递归递归。将在控件树中创建控件。可以通过重载OnLoad方法或创建Page_Load处理程序来处理此事件。

  • LoadComplete-完成加载过程,运行控件事件处理程序,并进行页面验证。可以通过重载OnLoadComplete方法或创建Page_LoadComplete处理程序来处理此事件。

  • PreRender -PreRender事件在渲染输出之前发生。通过处理此事件,页面和控件可以在呈现输出之前执行任何更新。

  • PreRenderComplete-为所有子控件递归触发PreRender事件,因此此事件可确保完成预渲染阶段。

  • SaveStateComplete-保存页面上的控件状态。保存个性化,控件状态和视图状态信息。 HTML标记已生成。可以通过重写Render方法或创建Page_Render处理程序来处理此阶段。

  • 卸载-卸载阶段是页面生命周期的最后一个阶段。它递归地引发所有控件的UnLoad事件,最后引发页面本身。完成最终清理,并释放所有资源和引用,例如数据库连接。可以通过修改OnUnLoad方法或创建Page_UnLoad处理程序来处理此事件。