代码之家  ›  专栏  ›  技术社区  ›  Vyrotek

在Asp.net MVC母版页中设置正文的OnLoad属性

  •  3
  • Vyrotek  · 技术社区  · 17 年前

    我有一个使用母版页的视图,该母版页包含一些javascript,需要使用Body的OnLoad执行这些javascript。对于某些视图,在母版页上设置OnLoad的最佳方法是什么?

    我尝试的想法是将javascript函数的名称作为ViewData传递。但是我真的不想让我的控制器知道页面上的javascript。我真的不喜欢这种方法。。。

    <body onload="<%=ViewData["Body_OnLoad"]%>">
    <asp:ContentPlaceHolder ID="MainContent" runat="server" />
    

    编辑-我想一个想法是使用jQuery的DocumentReady事件来代替。。。

    还有其他想法吗?

    4 回复  |  直到 17 年前
        1
  •  5
  •   David P    17 年前

    既然JQuery正式成为ASP.NETMVC的一部分,我建议使用它。它很小,为您的应用程序增加了很多价值。

    我建议添加Mustafa版本的JQuery,其中包含Intellisense注释:

    jquery-1.2.6-intellisense.js

    然后将其添加到您的脚本文件夹(MVC Beta 1中新增),并按如下方式引用:

    <script language="javascript" type="text/javascript" src="../../Scripts/jquery-1.2.6-intellisense.js"></script> 
    

    $(document).ready(function() {
       // do stuff when DOM is ready
    });
    

    因为您提到您只希望它发生在某些视图中,所以您可以在母版页中添加一个占位符,如下所示:

    <asp:contentplaceholder id="JavascriptPlaceholder" runat="server"></asp:contentplaceholder>  
    

    它会进入头部的内部

        2
  •  5
  •   Robert Vuković    17 年前

    来自博客的解决方案: Using body onload with ASP.net 2.0 MasterPages

    MasterPage.master
    
    <head>
    <asp:ContentPlaceHolder runat="server" id="Headers">
    </asp:ContentPlaceHolder>
    <script language=javascript>
       function mp_onload() {
         if(window.body_onload != null)
         window.body_onload();
       }
    </script>
    </head>
    <body onload="mp_onload();">
    
    Default.aspx
    
    <asp:Content ID="Content2" ContentPlaceHolderID="Headers" Runat="Server">
    <script language="javascript">
       function body_onload()
       {
           //do something
       }
    </script>
    </asp:Content>
     
        3
  •  3
  •   SaaS Developer    17 年前

    我在当前的MVC项目中使用了以下模式,到目前为止,它似乎对我的.js工作非常有效。。。

    在母版页中,我加载了我希望在所有内容页中使用的标准脚本文件(如jquery.js、global.js、jquery插件、.css文件等)。然后,我定义母版页中需要的任何事件(onLoad、onSave等)。我创建的每个内容页面都有自己的.js文件与之关联,我将该脚本文件加载到content.aspx页面中。任何需要在内容页之间以不同方式实现的.js事件都在单个content.js文件中处理。因此,基本上我的母版页有一组.js函数,我的内容页脚本将实现这些函数。现在我只是将那些template.js函数签名存储在一个文件中,然后将它们复制并粘贴到我需要创建的每个新content.js文件中。然而,我正在考虑构建一个代码生成器或工具,在我需要创建的任何新的.js文件中为我提供这些模板签名(如果.js具有某种形式的接口功能或继承特性,请告诉我)。

    主加载:jquery.js、global.js、plugins.js

    Global.js包含母版页调用的函数,这些函数与任何其他全局例程函数在内容页之间不会更改。

    每个ContentPage.js都为内容页实现自己的函数,以及母版页调用的具有不同行为的函数。

        4
  •  0
  •   yfeldblum    17 年前

    无论如何,您肯定应该使用jQuery或其他JavaScript框架。