2013-05-29 89 views
18

我已經通過谷歌和Stackoverflow看,並沒有找到答案。是否有任何內置的方式來讓一個bundle執行,或者有人知道有人寫這樣做的擴展幫助器方法?我怎樣才能使用腳本defer屬性的ASP MVC 4捆綁與Scripts.Render

+0

你正在尋找什麼樣的執行執行?你可以說得更詳細點嗎 ? – Shyju

+0

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

+0

請解釋你的應用/頁面特定需求 – Shyju

回答

29

嘗試在 Codeplex Site或通過Nuget Package

網絡優化升級到1.1.0版本,在1.1.0版本中,這些包括元素模板字符串。 所以,如果你想有一個腳本標籤包含defer屬性,你可以很容易地做到這一點:

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

和下面的標記將生成:

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

這使用'CdnFallbackExpression'打破CDN回退。回退檢查將在延遲腳本加載之前執行,導致回退始終啓動。 –

13

answer above是巨大的。我只想快速粘貼我的代碼給那些想要更簡潔的語法的人。

添加一個新的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); 
     } 
    } 
} 

然後,使用剃刀語法:

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

或者網絡表單語法:

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

正確的語法是defer ='defer'我認爲 –

+2

與舊版瀏覽器和XHTML解析器具有更廣泛的兼容性。閱讀更多:http://www.w3schools.com/tags/att_script_defer.asp – Believe2014

+0

將不會按照答案 – VisualBean

0

您可以使用BundleTable.Bundles.ResolveBundleUrl

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