【问题标题】:How do I add type="text/javascript" to a script tag when using System.Web.Optimization使用 System.Web.Optimization 时如何将 type="text/javascript" 添加到脚本标签
【发布时间】:2013-03-17 17:24:57
【问题描述】:

我有以下

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 在 script 标签中输出这个元素?

【问题讨论】:

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


【解决方案1】:

我已经这样解决了

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

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

【讨论】:

    【解决方案2】:

    我已经这样解决了

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

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

    【讨论】:

      【解决方案3】:

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

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

      并且不是@Scripts.Render(...)。原因是缩小了,只有@Styles.Render(...)知道Cascading Stylesheet语法,@Scripts.Render(...)专门用于JavaScript缩小。

      【讨论】:

        【解决方案4】:

        一种方法是更改​​脚本的呈现方式:

        发件人:

        @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 来做到这一点,我很想看看。

        更新:响应您的 cmets,如 this SO answer 中所述,在 System.Web.Optimization 的预发布版本中,有一个名为 RenderFormat 的选项可让您执行此操作也...但是我认为对于这种特殊情况,上面的内容更容易阅读。

        【讨论】:

        • 谢谢,发现了一个使用这种方法的帖子,但我认为这可能不是最有效的方法。也许这就是现在要走的路。
        • @jondow 是什么让它无效?
        • 意思是我希望有一个内置方法,例如 Scripts.Render 方法的重载或可以在 ScriptBundle 对象上设置的属性。
        • 即使在调试时也可以启用捆绑和缩小。如何在调试时禁用它?
        猜你喜欢
        • 2021-10-04
        • 2011-03-15
        • 2020-12-21
        • 2011-08-16
        • 2014-01-13
        • 1970-01-01
        • 2021-06-02
        • 2020-07-21
        • 2019-07-05
        相关资源
        最近更新 更多