2013-05-29 128 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>