代码之家  ›  专栏  ›  技术社区  ›  Rob Cooper

ASP.NET母版页中增强元素的Javascript

  •  3
  • Rob Cooper  · 技术社区  · 17 年前

    母版页脚本参考

    <script src="scripts.js" language="javascript" type="text/javascript" />
    

    单页

    <script>
        MakePretty("elementID");
    </script>
    

    内容页

    <head> 元素,我一直在使用以下代码将其添加到母版页 <头> 要素:

    HtmlGenericControl ctl = new HtmlGenericControl("script");
    ctl.Attributes.Add("language", "javascript");
    ctl.InnerHtml = @"MakePretty(""elementID"")";
    Master.Page.Header.Controls.Add(ctl);
    

    失灵 . 但是,如果我用一些简单的 alert("HI!")

    现在,在做了一些挖掘之后,我了解到该内容页 Load 事件在母版页之前引发,这可能会产生影响,但是,我认为页面上的javascript是一次加载/运行的?

    如何让内容页调用母版页中引用的javascript代码?

    笔记:

    • RegisterStartupScript 而类似的东西似乎在任何层面都不起作用。。
    • 控件ID设置得很好,即使在母版页环境中也是如此,并按预期呈现。

    抱歉,如果有任何不清楚的地方,我真的很累,因此如果需要,请评论是否需要回复/澄清。

    5 回复  |  直到 6 年前
        1
  •  5
  •   John Sheehan    17 年前

    在母版页的标题部分放置一个ContentPlaceHolder,然后在内容页上添加一个asp:Content控件以引用该占位符,并将脚本放置在该控件中。您可以通过这种方式为每个页面自定义它。

        2
  •  2
  •   roenving    17 年前

    <script type="text/javascript">
      window.onload = function(){
        MakePretty("elementID");
      }
    </script>
    

    <script type="text/javascript" src="myScript.js"></script>
    
        3
  •  1
  •   Aaron Powell    17 年前

    为什么不使用jQuery查找所有控件?大概是这样的:

    $(document).ready(function(){
      $("input[type='text'], input[type='radio'], input[type='checkbox'], select, textarea").each(function(){
        MakePretty(this);
      });
    });
    

    最好修改MakePretty方法,使其以元素而不是ID作为参数,以减少处理开销。

        4
  •  0
  •   Lou Franco    17 年前

    一旦您使用母版页,客户端控件的ID就不是您想象的那样了。生成脚本时应使用Control.ClientID。

        5
  •  0
  •   Mario    17 年前

    使用母版页时,您需要小心使用html属性ID,因为.NET会修改此值,因为它需要保持ID的唯一性。

    我假设您的javascript通过ID应用css样式,并且当您使用母版页时,ID与您的aspx中的ID不同。如果验证是否始终添加javascript,则回答时需要考虑以下因素:

    • 始终在页面加载中设置母版页id(this.id=“myPrefix”)
    • 母版页中的任何HTML元素都将以母版页id作为前缀(即:呈现页面上的“myPrefix_myDiv”)
    • 内容占位符id中的任何HTML元素都将以附加前缀作为前缀(即myPrefix\u ContentPlaceholder ID1\u myDiv)