ASP.NET - 生命周期
ASP.NET 生命周期指定、方式:
- ASP.NET 处理页面以生成动态输出
- 应用程序及其页面已实例化并进行处理
- ASP.NET 动态编译页面
ASP.NET 生命周期可以分为两组:
- 应用程序生命周期
- 页面生命周期
ASP.NET 应用程序生命周期
应用程序生命周期有以下阶段:
用户发出访问应用程序资源(页面)的请求。 浏览器将此请求发送到网络服务器。
统一管道收到第一个请求并发生以下事件:
创建了 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类。
卸载 - 呈现的页面被发送到客户端,页面属性(例如响应和请求)被卸载并完成所有清理。
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 事件,最后引发页面本身的 UnLoad 事件。 最终清理完成,所有资源和引用(例如数据库连接)都被释放。 可以通过修改 OnUnLoad 方法或创建 Page_UnLoad 处理程序来处理此事件。