ASP.NET Mvc 4为Url.Content使用bundle的好处

时间:2012-10-29 15:02:35

标签: asp.net-mvc-4 bundling-and-minification urlhelper

我有什么方法可以做到这一点吗?

捆绑的一些好处是:

  • 最小化
  • Gzip压缩
  • 请求具有用于处理文件版本(缓存)的令牌参数。

在我的网站中我使用了很多捆绑包,但在某些页面中我只有1个脚本,我认为我不应该仅为1个脚本创建捆绑包。有什么方法可以用Url.Content方法使用这三个好处。

我的utopic解决方案是设置一些东西(可能在web.config中),每当调用Url.Content时,它都会添加此功能。以这两种方式使用它:

<script type="text/javascript" src="@Url.Content("~/Scripts/...")"></script>
<script type="text/javascript" src="~/Scripts/..."></script>

(第二个是因为我正在使用Razor 2

如果无法做到这一点,我可以为UrlHelper创建一个扩展方法来添加此功能。

谢谢!

1 个答案:

答案 0 :(得分:1)

使用一个文件创建捆绑包以获得缩小和版本控制的好处并没有什么问题。您还必须使用Scripts.Render帮助程序,目前在UrlHelper中不支持此功能,但正如您所提到的,您可以编写一个扩展方法来调用Scripts帮助程序。

更新(按OP)

以下是我想要使用它的人的扩展方法:

public static IHtmlString DynamicScriptsBundle(this HtmlHelper htmlHelper, string nombre, params string[] urls)
{
    string path = string.Format("~/{0}", nombre);
    if (BundleTable.Bundles.GetBundleFor(path) == null)
        BundleTable.Bundles.Add(new ScriptBundle(path).Include(urls));
    return Scripts.Render(path);
}

public static IHtmlString DynamicStylesBundle(this HtmlHelper htmlHelper, string nombre, params string[] urls)
{
    string path = string.Format("~/{0}", nombre);
    if (BundleTable.Bundles.GetBundleFor(path) == null)
        BundleTable.Bundles.Add(new StyleBundle(path).Include(urls));
    return Styles.Render(path);
}