使用System.Web.Optimization时,如何将type =“text / javascript”添加到脚本标记中

时间:2013-03-27 15:00:31

标签: asp.net xhtml bundling-and-minification system.web.optimization

我有以下

bundles.Add(new ScriptBundle("~/bundles/scripts/common").Include(
                  "~/Scripts/jquery.validationEngine.js",
                  "~/Scripts/common.js"));

生成

<script src="/bundles/scripts/common?v=9O0Yi3fV_GWpGyJQ_QYURiOYy6SEmxUQtkUVN4GXo2U1"></script>

使用

渲染时
    <asp:PlaceHolder ID="PlaceHolderJs" runat="server">                
            <%: Scripts.Render("~/bundles/scripts/common") %>
    </asp:PlaceHolder>

哪个不是有效的HTML,因为它缺少type =“text / javascript”。如何使BundleCollection在脚本标记中输出此元素?

4 个答案:

答案 0 :(得分:11)

一种方法是更改​​渲染脚本的方式:

自:

@Scripts.Render("~/bundles/scripts/common")

要:

<script src="@BundleTable.Bundles.ResolveBundleUrl("~/bundles/scripts/common")" type="text/javascript"></script>

或者,根据您实施捆绑的方式,您可能需要:

<script src="@Microsoft.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/scripts/common")" type="text/javascript"></script>

或网页表单:

<script src="<%= Microsoft.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/scripts/common")%>" type="text/javascript"></script>

虽然如果有办法使用@ Script.Render我想看到它。

更新:在System.Web.Optimization的预发布版本中,根据this SO answer中的说明回复您的评论,有一个名为RenderFormat的选项这也会让你这样做......但我认为上面的内容对于这个特殊情况更容易阅读。

答案 1 :(得分:0)

我认为type="text/css"标记的答案不正确,对JavaScript来说是正确的(问题标题可能会误导?)。对于CSS文件,您应该使用

@Styles.Render("~/bundles/styles/common")

@Scripts.Render(...)。原因是缩小已完成,只有@Styles.Render(...)知道级联样式表语法,@Scripts.Render(...)专门用于JavaScript缩小。

答案 2 :(得分:0)

我是这样解决的

>      bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
>                             "~/Scripts/node_modules/jquery/dist/jquery.min.js"));

我认为你需要用 ~/bundles/jquery 替换 ~/bundles/scripts/common

答案 3 :(得分:0)

我是这样解决的

bundles.Add(
    new ScriptBundle("~/bundles/jquery").Include(
        "~/Scripts/node_modules/jquery/dist/jquery.min.js"
    )
);

我认为您需要将 ~/bundles/scripts/common 替换为 ~/bundles/jquery