如何添加特定于页面的脚本链接(使用母版页的MVC)

时间:2010-12-22 05:56:41

标签: javascript asp.net-mvc asp.net-mvc-2 asp.net-ajax

我对包含母版页和脚本标签感到困惑。我有几个我想要包含的脚本(* .js)文件,并不是所有文件都与每个页面相关。我正在使用母版页,似乎我只能在母版页中执行此操作。

但我认为这是一种浪费,我认为我需要在母版页中包含所有JS文件。这意味着我将在不使用所有页面的情况下加载JS文件。

有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

首先在母版页中添加ContentPlaceHolder:

<head runat="server">
  <title>My awesome master page</title>
  <script type="text/javascript" src="global.js"></script>
  <asp:ContentPlaceHolder ID="foo" runat="server" />
</head>

通过ContentPlaceHolder

从您的页面添加其他脚本
<asp:Content ContentPlaceHolderID="foo" runat="server">
    <script src="specific.js" type="text/javascript"></script>
</asp:Content>

答案 1 :(得分:1)

  1. 您可以向ViewModel添加一些属性,以标记您需要的js文件。
  2. 在制作中,我建议将所有js文件合并为一个并使用js minifier。 这将减少静态资源对服务器的调用次数。
  3. 如果您的js文件大小不大,我建议使用第二个选项。

    还有另一种选择,但它更复杂。您可以创建http扩展,它将以流畅的方式加载您的js文件并根据页面需要将它们组合并直接将它们推送到响应中。

答案 2 :(得分:0)

另一种可能更适合tkalve建议的方式,以编程方式执行此操作...

HtmlLink jsLink = new HtmlLink();
jsLink.Href = "~/scripttoload.js";
jsLink.Attributes.Add("type", "text/javascript");
Header.Controls.Add(jsLink);

但是页面(母版页)的标题必须声明为runat =“server”才能执行此操作。查看http://odetocode.com/code/450.aspx,它提供了对各种主页问题的非常有用的讨论,包括解决此问题的几种方法。