您的位置:首页 > 其它

重载页面事件,以及在基类中使用注册脚本 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 事件之中或之后的事件中才会真正注册到页面上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐