2013-05-29 5 views
18

Sprawdziłem przez Google i Stackoverflow i nie znalazłem odpowiedzi na to. Czy jest jakiś zbudowany w taki sposób, aby wykonać wykonanie pakietu, czy jest on znany z metody pomocnika rozszerzenia, którą ktoś napisał, aby to zrobić?Jak korzystać z atrybutu odroczenia skryptu dla pakietów ASP MVC 4 z Scripts.Render

+0

Jakiego rodzaju egzekucyjnego wykonania szukasz? Czy mógłbyś to sprecyzować ? – Shyju

+0

http://www.w3schools.com/tags/att_script_defer.asp – kyleb

+0

Wyjaśnij wymaganie dotyczące Twojej aplikacji/strony, proszę – Shyju

Odpowiedz

29

Spróbuj modernizacji Optimization Web do wersji 1.1.0 na Codeplex Site lub poprzez Nuget Package

W wersji 1.1.0 obejmowały one Element Template Strings. Więc jeśli chcesz tag skryptu zawiera Defer przypisać można łatwo to zrobić:

@Scripts.RenderFormat("<script src='{0}' defer></script>","~/bundles/jquery") 

oraz następujące znaczniki zostaną wygenerowane:

<script src="/Scripts/jquery-1.7.1.js" defer></script> 
+0

To przełamuje awarie CDN za pomocą 'CdnFallbackExpression'. Sprawdzanie rezerwowe zostanie wykonane przed załadowaniem odroczonego skryptu, co powoduje, że funkcja powrotu zawsze się kopie. –

13

answer above jest wielki. Chcę tylko szybko wkleić mój kod tutaj dla tych, którzy chcą mieć bardziej zwięzłą składnię.

Dodaj nowy C# klasy

// -------------------------------------------------------------------------------------------------------------------- 
// <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); 
     } 
    } 
} 

Następnie użyj Razor składnię:

@Scripts.RenderDefer("~/bundles/jquery") 

Albo Webform składnia:

<%: Scripts.RenderDefer("~/bundles/jquery") %> 
+0

Poprawna składnia to defer = 'defer' Myślę, że –

+2

To ma większą kompatybilność ze starszymi przeglądarkami i parserami XHTML. Przeczytaj więcej: http://www.w3schools.com/tags/att_script_defer.asp – Believe2014

+0

Nie będzie działać tak, jak podano w odpowiedzi – VisualBean

0

Można użyć BundleTable.Bundles.ResolveBundleUrl:

<script src="@(BundleTable.Bundles.ResolveBundleUrl("~/bundles/jquery"))" defer></script> 
Powiązane problemy