分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

ASP.NET Page执行顺序(ASP.NET生命周期)

发布时间:2023-09-06 02:01责任编辑:傅花花关键词:.NET

此部分说明的生命周期只有部分:

---引用MSDN

阶段

说明

页请求

页请求发生在页生命周期开始之前。用户请求页时,ASP.NET 将确定是否需要分析和编译页(从而开始页的生命周期),或者是否可以在不运行页的情况下发送页的缓存版本以进行响应。

开始

在开始阶段,将设置页属性,如 Request和 Response在此阶段,页还将确定请求是回发请求还是新请求,并设置 IsPostBack 属性。此外,在开始阶段期间,还将设置页的 UICulture 属性。

页初始化

页初始化期间,可以使用页中的控件,并将设置每个控件的 UniqueID 属性。此外,任何主题都将应用于页。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。

加载

加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性。

验证

在验证期间,将调用所有验证程序控件的 Validate 方法,此方法将设置各个验证程序控件和页的 IsValid 属性。

回发事件处理

如果请求是回发请求,则将调用所有事件处理程序。

呈现

在呈现之前,会针对该页和所有控件保存视图状态。在呈现阶段中,页会针对每个控件调用 Render 方法,它会提供一个文本编写器,用于将控件的输出写入页的 Response 属性的 OutputStream 中。

卸载

完全呈现页并已将页发送至客户端、准备丢弃该页后,将调用卸载。此时,将卸载页属性(如Response 和 Request)并执行清理。

程序测试页面加载顺序

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 ?8 namespace Order 9 {10 ????public partial class TestControls : System.Web.UI.Page11 ????{12 ????????static int count = 0;13 ????????//414 ????????protected void Page_Load(object sender, EventArgs e)15 ????????{16 ????????????Response.Write(count + "----Page_Load <br/>");17 ????????????count++;18 ????????}19 ????????//020 ????????protected override void OnPreInit(EventArgs e)21 ????????{22 ????????????base.OnPreInit(e);23 ????????????Response.Write(count + "----OnPreInit <br/>");24 ????????????count++;25 ????????}26 ????????//127 ????????protected override void OnInit(EventArgs e)28 ????????{29 ????????????base.OnInit(e);30 ????????????Response.Write(count + "----OnInit <br/>");31 ????????????count++;32 ????????}33 ????????//534 ????????protected override void OnLoad(EventArgs e)35 ????????{36 ????????????base.OnLoad(e);37 ????????????Response.Write(count + "----OnLoad <br/>");38 ????????????count++;39 ????????}40 ????????//341 ????????protected override void OnPreLoad(EventArgs e)42 ????????{43 ????????????base.OnPreLoad(e);44 ????????????Response.Write(count + "----OnPreLoad <br/>");45 ????????????count++;46 ????????}47 ????????//648 ????????protected override void OnLoadComplete(EventArgs e)49 ????????{50 ????????????base.OnLoadComplete(e);51 ????????????Response.Write(count + "----OnLoadComplete <br/>");52 ????????????count++;53 ????????}54 ????????//255 ????????protected override void OnInitComplete(EventArgs e)56 ????????{57 ????????????base.OnInitComplete(e);58 ????????????Response.Write(count + "----OnInitComplete <br/>");59 ????????????count++;60 ????????}61 ????????protected override void OnUnload(EventArgs e)62 ????????{63 ????????????base.OnUnload(e);64 ????????}65 ????????protected override void OnDataBinding(EventArgs e)66 ????????{67 ????????????base.OnDataBinding(e);68 ????????????Response.Write(count + "----OnDataBinding <br/>");69 ????????????count++;70 ????????}71 ????????//772 ????????protected override void OnPreRender(EventArgs e)73 ????????{74 ????????????base.OnPreRender(e);75 ????????????Response.Write(count + "----OnPreRender <br/>");76 ????????????count++;77 ????????}78 ????????protected void btnGraphics_Click1(object sender, EventArgs e)79 ????????{80 ????????????Response.Write(count + "----btnGraphics_Click <br/>");81 ????????}82 ????}83 }

运行结果:

0----OnPreInit 
1----OnInit 
2----OnInitComplete 
3----OnPreLoad 
4----Page_Load 
5----OnLoad 

  ----Button_Click

6----OnLoadComplete 
7----OnPreRender 

对应事件分析:

OnPreInit:当调用该方法时,引发PreInit事件。在该事件中主要是应用App_Themes中的主题,与应用母版页,通常这一步我们不需要做什么。

OnInit:初始化页面所应用到的控件,然后将应用的Themes应用给控件,递归的触发子空间的Init方法

OnInitComplete:它的调用标示着初始化完成,所有的控件均已经初始化完毕,所有Themes都已经应用

OnPreLoad:它的调用标示着页面进入加载状态,在该事件中,为自身和所有控件加载视图状态(??),然后会处理Request实例包含所有会发数据 

OnLoad:通常用的事件,也就是Page_Load事件,Page_XXX是所有时间的一种事时间链接形式,如Page_Init将调用OnInit方法。这个事件可以处理回发,由于视图状态,Themes,子控件都已经初始化完毕,所以便于我们添加逻辑而不必担心被其他事件把值覆盖                 掉。值得注意的是,任何页面的Load顺序是先自己,再子控件,如:一个Aspx页面被调用Load事件,先加载本身,然后再加载如母版页、用户控件、第三方服务器控件等等

OnLoadComplete:标示着所有控件的加载完成。下一步则是将加载内容进行呈现

OnPreRender:该事件处理准备呈现的一些工作。如:对设置了DataSource的控件进行DataBind,通常,我们可以再这个事件上动态修改某些控件的值

OnPreRenderComplete:该事件标志着准备呈现完成,数据已经完成绑定

SaveViewState:该事件中,将序列化ViewState,然后再页面中以一个input:hidden的元素保存试图状态

Render:在这个阶段,框架会调用所有控件的Render方法,进行页面呈现。以生产html页

Unload:在页面生命周期结束后,进行卸载

ASP.NET Page执行顺序(ASP.NET生命周期)

原文地址:https://www.cnblogs.com/DreamRecorder/p/9223898.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved