ASP.NET深入浅出系列2-页面生命周期详解

简介:

上个系列中介绍了页面生命周期的整体流程,可能有些读者还想更进一步了解整个生命周期的细节,限于篇幅我不可能讲到所有细节,也没必要,这里仅举几个例子,大家可以通过这几个例子学习一下页面生命周期的研究方式。
Control类中有如下事件
//     当服务器控件绑定到数据源时发生。
public event EventHandler DataBinding;


//     当从内存释放服务器控件时发生,这是请求 ASP.NET 页时服务器控件生存期的最后阶段。
public event EventHandler Disposed;


//     当服务器控件初始化时发生;初始化是控件生存期的第一步。
public event EventHandler Init;


//     当服务器控件加载到 System.Web.UI.Page 对象中时发生。
public event EventHandler Load;


//     在加载 System.Web.UI.Control 对象之后、呈现之前发生。
public event EventHandler PreRender;


//     当服务器控件从内存中卸载时发生。
public event EventHandler Unload;


因为每个Page和绝大多书控件都是继承于这个Control类,所以他们都可以注册这些事件,如果我们提供了相应名字的方法,ASP.NET在编译时会帮我们注册相应的方法到事件中,比如我们如果在页面中写了如下方法
protected void Page_Init(object sender, EventArgs e)
    {
        Trace.Write("Page_Init");
    }
那ASP.NET在编译时会将这个方法注册到Control类的Init事件中,也就是当页面初始化的时候就会调用这个Page_Init方法。我们右键Page类“选转到定义”菜单可以看到Page的定义,这个定义中还有些事件

//     在页初始化完成时发生。
public event EventHandler InitComplete;

//     在页生命周期的加载阶段结束时发生。
public event EventHandler LoadComplete;

//     在页初始化开始时发生。
public event EventHandler PreInit;

//     在页 System.Web.UI.Control.Load 事件之前发生。
public event EventHandler PreLoad;

//     在呈现页内容之前发生。
public event EventHandler PreRenderComplete;

//     在页已完成对页和页上控件的所有视图状态和控件状态信息的保存后发生。
[EditorBrowsable(EditorBrowsableState.Advanced)]
public event EventHandler SaveStateComplete;
那我们如何知道这些事件谁先谁后呢,我们可以使用Trace方法检测。
首先创建一个项目网站,在default.aspx页面指令上加入Trace="true",然后拖上几个控件。
前端页面如下:

Code

 后台代码如下:

Code

 

运行起来,我们可以看到如下图:


通过图中显示我们可以分析出控件的_Init事件先于Page_Init,Page_Init先于Page_Load,Init的事件顺序按照控件在页面上位置从上到下的顺序开始调用,Page_Init事件最后触发,GridView1_DataBinding事件先于Page_Load事件。
所以如果大家想研究事件的先后顺序可以再写些相应控件和事件即可。


本文转自 你听海是不是在笑 博客园博客,原文链接:http://www.cnblogs.com/nuaalfm/archive/2008/09/11/1289325.html  ,如需转载请自行联系原作者

相关文章
|
4月前
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
51 5
|
7月前
|
开发框架 .NET 中间件
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
159 7
|
4月前
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
|
开发框架 数据可视化 前端开发
ASP.NET Core MVC+Quartz实现定时任务可视化管理页面
ASP.NET Core MVC+Quartz实现定时任务可视化管理页面
595 0
|
开发框架 JavaScript .NET
Asp.net C#页面传参的几种方式
Asp.net C#页面传参的几种方式
150 0
mvc.net分页查询案例——前台页面(Index.aspx)
mvc.net分页查询案例——前台页面(Index.aspx)
|
开发框架 JSON 前端开发
【C#】.net core2.1,自定义全局类对API接口和视图页面产生的异常统一处理
在开发一个网站项目时,异常处理和过滤功能是最基础的模块 本篇文章就来讲讲,如何自定义全局异常类来统一处理
241 0
|
开发框架 程序员 API
【C#】.net core2.1,通过扩展状态代码页方法对404页面进行全局捕抓并响应信息
在开发一个网站项目时,除了异常过滤功能模块,还需要有针对404不存在的api接口和页面处理功能 本篇文章就来讲讲,如何自定义全局请求状态类来统一处理
230 0
|
开发框架 .NET Windows
真正解决ASP.NET每一个页面首次访问超级慢的问题
真正解决ASP.NET每一个页面首次访问超级慢的问题
294 0