重载页面事件,以及在基类中使用注册脚本 RegisterStartupScript 无效的问题
2010-07-03 12:04
344 查看
因为希望在基类中验证权限及执行一些初始化逻辑,所以特别关注了一下页面上事件的执行顺序,后来又需要做一个 js 的提醒功能,所以又需要在基类上注册脚本,特此研究了一下。
页面上较为常用的九个事件,其执行顺序如下:
1 : OnPreInit
2 : OnInit
3 : OnInitComplete
4 : OnPreLoad
5 : OnLoad
6 : Page_Load
7 : OnLoadComplete
8 : OnPreRender
9 : OnPreRenderComplete
但是其中 OnLoad 事件和 Page_Load 事件很有趣,Page_Load 执行后的顺序如下:
1 : OnPreInit
2 : OnInit
3 : OnInitComplete
4 : OnPreLoad
5 : OnLoad
6 : Page_Load
OnLoad 执行后的顺序如下:
1 : OnPreInit
2 : OnInit
3 : OnInitComplete
4 : OnPreLoad
5 : OnLoad
6 : Page_Load
它们执行的顺序都是 OnLoad 在前,但是问题是,如果它们是两个不同的方法,那么总会有一个后执行,如果 OnLoad 在之前执行,那么“6 : Page_Load”这步应该根本不会执行,可是 Page_Load 偏偏紧随其后就执行了。我能想到的唯一解释就是 OnLoad 和 Page_Load 是同一个事件,Page_Load 应是 OnLoad 的别名,因为两个方法都被我重载了一次,那么事件也就执行了两次。
然后我发现以下脚本注册的方法,在页面的基类中仅可以放在 OnInit 事件完成之后注册,否则没有效果,而在最终页面上重载事件则没有这个限制。
Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), js, true);
就算像下面这样先执行上层的基类初始化,也没有效果:
base.OnInit(e);
this.Javascript("MessageHandler();");
只有放到 OnInitComplete 事件之中或之后的事件中才会真正注册到页面上。
页面上较为常用的九个事件,其执行顺序如下:
1 : OnPreInit
2 : OnInit
3 : OnInitComplete
4 : OnPreLoad
5 : OnLoad
6 : Page_Load
7 : OnLoadComplete
8 : OnPreRender
9 : OnPreRenderComplete
但是其中 OnLoad 事件和 Page_Load 事件很有趣,Page_Load 执行后的顺序如下:
1 : OnPreInit
2 : OnInit
3 : OnInitComplete
4 : OnPreLoad
5 : OnLoad
6 : Page_Load
OnLoad 执行后的顺序如下:
1 : OnPreInit
2 : OnInit
3 : OnInitComplete
4 : OnPreLoad
5 : OnLoad
6 : Page_Load
它们执行的顺序都是 OnLoad 在前,但是问题是,如果它们是两个不同的方法,那么总会有一个后执行,如果 OnLoad 在之前执行,那么“6 : Page_Load”这步应该根本不会执行,可是 Page_Load 偏偏紧随其后就执行了。我能想到的唯一解释就是 OnLoad 和 Page_Load 是同一个事件,Page_Load 应是 OnLoad 的别名,因为两个方法都被我重载了一次,那么事件也就执行了两次。
然后我发现以下脚本注册的方法,在页面的基类中仅可以放在 OnInit 事件完成之后注册,否则没有效果,而在最终页面上重载事件则没有这个限制。
Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), js, true);
就算像下面这样先执行上层的基类初始化,也没有效果:
base.OnInit(e);
this.Javascript("MessageHandler();");
只有放到 OnInitComplete 事件之中或之后的事件中才会真正注册到页面上。
相关文章推荐
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterF
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEvent
- ASP.net 中 使用ClientScript.RegisterStartupScript() 注册脚本
- ASP.NET编程模型:RegisterStartupScript向页面注册脚本
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEvent
- RegisterStartupScript或RegisterClientScriptBlock注册js脚本而无法执行的问题分析
- 在C#中可以使用RegisterClientScriptBlock、RegisterStartupScript和RegisterClientScriptInclude来向客户端注册脚本,它们的区别
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEvent
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterF
- [原]ASP.NET中使用JQUERY-EASYUI后,解决ClientScript.RegisterStartupScript 所注册脚本执行两次
- 解决AJAX中使用UpdatePanel后再用RegisterStartupScript等无法弹出对话框问题
- ScriptManager.RegisterStartupScript()方法在ajax页面无效
- Page.ClientScript.RegisterStartupScript()方法使用注意问题
- 关于在.net1.1中使用RegisterClientScriptBlock()注册脚本的显示顺序的BUG
- 解决AJAX中使用UpdatePanel后再用RegisterStartupScript等无法弹出对话框问题
- Asp.net开发心得点滴[动态加载的用户控件使用事件委托,交给页面处理的事件无效问题]
- ScriptManager.RegisterStartupScript()方法在ajax页面无效的解决方法