Я просмотрел Google и Stackoverflow и не нашел ответа для этого. Есть ли какой-либо встроенный способ сделать пакет выполненным как дефис, или кто-то знает способ вспомогательного расширения, который кто-то написал для этого?
Как я могу использовать атрибут defer script для пакетов ASP MVC 4 со скриптами. Render
Ответ 1
Попробуйте обновить веб-оптимизацию до версии 1.1.0 на сайт Codeplex или через пакет Nuget
В версии 1.1.0 они включали строки шаблонов элементов. Поэтому, если вы хотите, чтобы тег script содержал атрибут defer, вы можете легко сделать это:
@Scripts.RenderFormat("<script src='{0}' defer></script>","~/bundles/jquery")
и будет создана следующая разметка:
<script src="/Scripts/jquery-1.7.1.js" defer></script>
Ответ 2
Ответ выше - это замечательно. Я просто хочу быстро вставить свой код сюда для тех, кто хочет иметь более сжатый синтаксис.
Добавить новый класс С#
// --------------------------------------------------------------------------------------------------------------------
// <copyright file="Scripts7.cs" company="Believe">
// http://believeblog.azurewebsites.net/
// </copyright>
// --------------------------------------------------------------------------------------------------------------------
using System.Web;
using System.Web.Optimization;
namespace MVCExtension
{
/// <summary>
/// The scripts.
/// </summary>
public static class Scripts
{
/// <summary>
/// Render scripts as deferred
/// </summary>
/// <param name="paths">
/// The paths.
/// </param>
/// <returns>
/// The <see cref="IHtmlString"/>.
/// </returns>
public static IHtmlString RenderDefer(params string[] paths)
{
return Scripts.RenderFormat(@"<script src='{0}' defer></script>", paths);
}
}
}
Затем используйте синтаксис Razor:
@Scripts.RenderDefer("~/bundles/jquery")
Синтаксис Webform:
<%: Scripts.RenderDefer("~/bundles/jquery") %>
Ответ 3
Вы можете использовать BundleTable.Bundles.ResolveBundleUrl
:
<script src="@(BundleTable.Bundles.ResolveBundleUrl("~/bundles/jquery"))" defer></script>