当使用System.Web.Optimization时,如何将type="text/javascript"添加到脚本标记?

9

我有以下内容

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>

由于缺少type="text/javascript",这不是有效的HTML。我该如何使BundleCollection在脚本标记中输出此元素?


你是指type="text/javascript"吗?如果是的话,并且你正在使用HTML5,则不需要type属性。 - Netricity
嗨,我确实是指JavaScript(帖子已编辑)。但它不是HTML5。谢谢。 - jondow
“Resource interpreted as script but transferred with MIME type text/plain.” 错误 - https://dev59.com/unA75IYBdhLWcg3wH1JB - LCJ
4个回答

12

有一种方法是改变脚本的渲染方式:

从:

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

To:

<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的方法来完成这个任务,我很想看到它。

更新:回应您的评论,在这个SO答案中指定,在System.Web.Optimization的预发行版本中,还有一个名为RenderFormat的选项,也可以让您完成此操作...但对于这种特定情况,我认为上面的内容更易读。


1
谢谢,我看到了一个帖子中提到了这种方法,但我认为这可能不是最有效的方式。也许现在这是可行的方式。 - jondow
@jondow 什么使它不有效? - MikeSmithDev
1
我的意思是,我原本期望有一个内置的方法,比如在Scripts.Render方法上进行重载或者在ScriptBundle对象上设置属性。 - jondow
它可以在调试模式下启用捆绑和缩小,如何在调试模式下禁用它? - ali-myousefi

0

我已经这样解决了

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

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


0

我认为标记的答案对于type="text/css"不正确,它对于JavaScript是正确的(也许问题标题有误导性?)。对于CSS文件,您应该使用

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

而不是 @Scripts.Render(...)。原因是进行了缩小,并且只有 @Styles.Render(...) 知道层叠样式表语法,@Scripts.Render(...) 专门用于 JavaScript 缩小。


0

我已经解决了它

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接