zoukankan      html  css  js  c++  java
  • 重载页面事件,以及在基类中使用注册脚本 RegisterStartupScript 无效的问题

    因为希望在基类中验证权限及执行一些初始化逻辑,所以特别关注了一下页面上事件的执行顺序,后来又需要做一个 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 事件之中或之后的事件中才会真正注册到页面上。

  • 相关阅读:
    Data Security---->Control Access to the Organization
    Data Modeling
    Slaesforce Paltform Development Basic
    Customize your Chatter Experience.
    wamp自定义网站根目录及多站点配置
    1053-1055
    1046-1052
    1044-1045
    HDOJ 1038-1043
    HDOJ 1031-1037
  • 原文地址:https://www.cnblogs.com/islee/p/1770403.html
Copyright © 2011-2022 走看看