ASP.NET - 生命周期

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

  • ASP.NET处理页面以生成动态输出

  • 应用程序及其页面被实例化和处理

  • ASP.NET动态编译页面

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

  • 应用程序生命周期

  • 页面生命周期

ASP.NET应用程序生命周期

应用程序生命周期包含以下阶段:/p>

  • 用户请求访问应用程序资源,页面.浏览器将此请求发送到Web服务器.

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

    • 创建类ApplicationManager的对象.

    • 类HostingEnvironment的对象用于提供有关资源的信息.

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

  • 创建响应对象.创建并初始化HttpContext,HttpRequest和HttpResponse等应用程序对象.

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

  • 请求由HttpApplication类处理.此类引发了不同的事件来处理请求.

ASP.NET页面生命周期

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

Page类创建页面上所有控件的分层树.除指令外,页面上的所有组件都是此控制树的一部分.您可以通过向page指令添加trace ="true"来查看控制树.我们将在'指令'和'事件处理'下覆盖页面指令和跟踪.

页面生命周期阶段是:

  • 初始化

  • 页面上控件的实例化

  • 恢复和维护状态

  • 执行事件处理程序代码

  • 页面呈现

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

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

  • 页面请求  - 当ASP.NET收到页面请求时,它决定是否解析并编译页面,或者会有页面的缓存版本;相应地发送响应.

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

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

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

  • 验证  - 验证控件的验证方法调用并在成功执行时,页面的IsValid属性设置为true.

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

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

  • 卸载  - 渲染的页面被发送到客户端,并且页面属性(例如响应和请求)被卸载并完成所有清理.

ASP.NET页面生命周期事件

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

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

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

  • Init  -  Init事件初始化控件属性和控制树是建立的.可以通过重载OnInit方法或创建Page_Init处理程序来处理此事件.

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

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

  • LoadPostData  - 在此阶段,所有输入字段的内容都使用< form>定义.标签已处理.

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

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

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

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

  • PreRenderComplete  - 由于PreRender事件是对所有子控件递归触发,此事件确保完成预呈现阶段.

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

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