Как добавить type = text / javascript в тег скрипта при использовании 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 выводить этот элемент в тег скрипта?


person jondow    schedule 27.03.2013    source источник
comment
Вы имеете в виду type = text / javascript? Если это так, и вы используете HTML5, атрибут type не нужен.   -  person Netricity    schedule 27.03.2013
comment
Привет, я имел в виду javascript (сообщение отредактировано). Но это не HTML5. Спасибо.   -  person jondow    schedule 27.03.2013
comment
См. «Ресурс интерпретируется как скрипт, но передается с типом MIME text / plain». Ошибка - stackoverflow.com/questions/3467404/   -  person LCJ    schedule 08.11.2013
comment
Возможный дубликат Produce атрибут типа в теге скрипта при использовании Scripts.Render в ASP.NET MVC 4   -  person PashaPash    schedule 24.11.2015


Ответы (4)


Один из способов - изменить способ рендеринга скриптов:

От:

@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, которая также позволит вам сделать это ... но я думаю, что в данном конкретном случае все вышесказанное легче читать.

person MikeSmithDev    schedule 27.03.2013
comment
Спасибо, заметил сообщение с этим методом, но я подумал, что это, вероятно, не самый эффективный способ. Может быть, сейчас это правильный путь. - person jondow; 27.03.2013
comment
@jondow Что делает его неэффективным? - person MikeSmithDev; 27.03.2013
comment
Это означает, что я ожидал наличия встроенного метода, такого как перегрузка метода Scripts.Render или свойства, которое можно было бы установить для объекта ScriptBundle. - person jondow; 27.03.2013
comment
В этом случае можно включить объединение и минимизацию даже при отладке. Как можно отключить его при отладке? - person ali-myousefi; 11.05.2019

Я считаю, что отмеченный ответ неверен для type="text/css", он верен для JavaScript (может быть, заголовок вопроса вводит в заблуждение?). Для файлов CSS вы должны использовать

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

и не @Scripts.Render(...). Причина в том, что минификация выполнена, и только @Styles.Render(...) знает синтаксис каскадных таблиц стилей, @Scripts.Render(...) специализируется на минификации JavaScript.

person Matt    schedule 03.03.2015

Я решил это вот так

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

я думаю, вам нужно заменить ~ / bundles / scripts / common на ~ / bundles / jquery

person user15118909    schedule 31.01.2021

Я решил это вот так

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

Думаю, нужно заменить ~/bundles/scripts/common на ~/bundles/jquery

person Alaeddine    schedule 31.01.2021