2013-05-29 7 views
18

Ho controllato Google e StackOverflow e non ho trovato una risposta per questo. Esiste un modo per rendere un bundle eseguito come deffered o qualcuno sa di un metodo di estensione helper che qualcuno ha scritto per fare questo?Come posso utilizzare l'attributo defer script per ASP MVC 4 Bundles con Scripts.Render

+0

Che tipo di esecuzione deffer stai cercando? Può essere più preciso ? – Shyju

+0

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

+0

Spiega la tua app/requisito specifico della pagina per favore – Shyju

risposta

29

provare ad aggiornare l'Ottimizzazione Web alla versione 1.1.0 su Codeplex Site o tramite Nuget Package

Nella versione 1.1.0 hanno incluso Element Stringhe modello. Quindi, se volete un tag script per contiene l'attributo rinviare si può facilmente fare questo:

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

e il seguente markup verrà generato:

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

Questo interrompe i fallback CDN usando 'CdnFallbackExpression'. Il controllo fallback verrà eseguito prima che lo script posticipato si carichi causando il fallback di eseguire sempre il kickover. –

13

Il answer above è grande. Voglio solo incollare rapidamente il mio codice qui per coloro che vogliono avere una sintassi più concisa.

Aggiungere una nuova classe C#

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

Quindi, utilizzare Razor sintassi:

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

O Webform:

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

La sintassi corretta è defer = "defer" Penso che –

+2

abbia una maggiore compatibilità con i browser più vecchi e i parser XHTML. Per saperne di più: http://www.w3schools.com/tags/att_script_defer.asp – Believe2014

+0

Non funzionerà come previsto nella risposta – VisualBean

0

È possibile utilizzare BundleTable.Bundles.ResolveBundleUrl:

<script src="@(BundleTable.Bundles.ResolveBundleUrl("~/bundles/jquery"))" defer></script> 
Problemi correlati