Asp.NET页面事件加载的顺序
这篇文章主要介绍了Asp.NET页面事件加载的顺序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
ASP.NET 母版页和内容页中的事件
我们知道母版页和内容页都可以包含控件的事件处理程序。对于控件而言内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件。控件事件不会从内容页发送到母版页,也不能在内容页中处理来自母版页控件的事件,它们只会在自己事件内部进行处理。
下面是母版页(Master)与内容页(ContentPage)合并后事件的发生顺序:
Master页面控件Init事件。 ContentPage页面控件Init事件。 Master页Init事件。 ContentPage页Init事件。 ContentPage页Load事件。 Master页Load事件。 ContentPage页面控件Load事件。 ContentPage页面PreRender事件。 Master页面PreRender事件。 Master页面控件PreRender事件。 ContentPage页面控件PreRender事件。
母版页和内容页中的事件顺序对于页面开发人员并不重要。但是,如果创建的事件处理程序取决于某些事件的可用性,了解母版页和内容页中的事件顺序很有帮助。
Asp.Net中页面事件加载的先后顺序
1、单独一个Page 执行中将按照如下顺序激活事件:
Page.PreInit Page.Init Page.InitComplite Page.PreLoad Page.Load Page.LoadComplete Page.PreRender Page.PreRenderComplete
2、如果页面从另一个页面继承,如BasePage:System.Web.UI.Page
,在BasePage中添加了一下验证功能,如是否登录、是否拥有权限等方面的检查,而其它页面从BasePage继承,则BasePage和最终Page的事件激活顺序是:
BasePage.PreInit Page.PreInit BasePage.Init Page.Init BasePage.InitComplite Page.InitComplite BasePage.PreLoad Page.PreLoad BasePage.Load Page.Load BasePage.LoadComplete Page.LoadComplete BasePage.PreRender Page.PreRender BasePage.PreRenderComplete Page.PreRenderComplete
3、如果使用了MasterPage,则MasterPage中的事件和ContentPage中的事件按照下面顺序激活:
ContentPage.PreInit Master.Init ContentPage.Init ContentPage.InitComplite ContentPage.PreLoad ContentPage.Load Master.Load ContentPage.LoadComplete ContentPage.PreRender Master.PreRender ContentPage.PreRenderComplete
需要注意的是Master里面是没有PreInit事件。
4、如果ContentPage继承BasePage,那么,各事件的执行顺序将变成:
BasePage.PreInit ContentPage.PreInit Master.Init BasePage.Init ContentPage.Init BasePage.InitComplite ContentPage.InitComplite BasePage.PreLoad ContentPage.PreLoad BasePage.Load ContentPage.Load Master.Load BasePage.LoadComplete ContentPage.LoadComplete BasePage.PreRender ContentPage.PreRender Master.PreRender BasePage.PreRenderComplete ContentPage.PreRenderComplete
只需要记住:先加载继承页,再加载自己,如果继承页有继承则先加载继承页的继承。
事件处理器名称 | 发生时间 |
Page_Init | 在Web窗体的视图状态加载服务器控件并对其初始化。 这是窗体生命周期的第一步 |
Page_Load | 在Page对象上载入服务器控件。由于此时视图状态信息是可以使用的,因此载这里可以用代码来改变空间的设置或者载页面上显示文本。 |
Page_PreRender | 应用程序将要呈现Page |
Page_Unload | 页面从内存中卸载 |
Page_Error | 发生未处理的异常 |
Page_AbortTransaction | 事务处理被终止 |
Page_CommitTransaction | 事务处理被接受 |
Page_DataBinding | 把页面上的服务器空间和数据源绑定载一起 |
Page_Disposed | Page对象从内存中释放掉。这是Page对象生命周期中的最后一个事件 |
Init,Load,PreRender事件执行顺序:
1)控件的Init事件
2)控件所在页面的Init事件
3)控件所在页面的Load事件
4)控件的Load事件
5)控件所在页面的PreRender事件
6)控件的PreRender事件
个人研究的一些心得体会:(下面的两点可以通过自建页面并重写相关事件进行验证)
1.Init事件从最里面的控件(例如用户控件)向最外面的控件(页面)引发,Load及PreRender等其他事件从最外面的控件向最里面的控件引发。
2.控件之间相同事件的执行顺序依控件在页面的位置按从左到右,从上到下的先后顺序执行。
注意:
1. 切记用户控件也被视为页面中的一个控件;
2. 把用户控件作为单独的一个特殊页面来看,它本身及其所包含的控件同样遵守相同的规律。
3. 如果客户端程序(如JavaScript)中会用到客户端body对像的onload事件,注意这个客户端事件是最后执行,即在服务器端所有事件执行完后才执行。
4. Master、用户自定义控件里面是没有PreInit、OnComplete事件.Master本身就是一个用户控件usercontrol,usercontrol继承TemplateControl,TemplateControl继承Control,让我们看看Control里面可重写的事件(部分截图),也可以查看此官方文档:https://referencesource.microsoft.com/#System.Web/UI/Control.cs,87dbac93d9749fa2。
感谢你能够认真阅读完这篇文章,希望小编分享的“Asp.NET页面事件加载的顺序”这篇文章对大家有帮助,同时也希望大家多多支持恰卡编程网,关注恰卡编程网行业资讯频道,更多相关知识等着你来学习!
推荐阅读
-
ASP.NET怎么实现登出系统并清除Cookie
-
CentOS下怎么实现Mono和Asp.net
CentOS下怎么实现Mono和Asp.net这篇文章主要介绍“C...
-
ASP.NET的Core AD域登录过程怎么实现
ASP.NET的Core AD域登录过程怎么实现本文小编为大家详细...
-
ASP.NET MVC中两个配置文件的作用是什么
-
ASP.NET MVC过滤器执行顺序是什么
-
ASP.NET Core Zero模块系统的示例分析
ASP.NET Core Zero模块系统的示例分析这篇文章主要为...
-
asp.net多级分类统计列表怎么实现
asp.net多级分类统计列表怎么实现本篇内容介绍了“asp.ne...
-
C#怎么用ASP.NET Core开发学生管理系统
-
ASP.net中aspx与cs函数怎么实现互调
ASP.net中aspx与cs函数怎么实现互调,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇...
-
ASP.NET中怎么优化站点构建托管资源
这篇文章将为大家详细讲解有关ASP.NET中怎么优化站点构建托管资源,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完...