捆绑Asp.Net MVC4和jQuery模板

时间:2012-10-13 18:06:54

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

我对Asp.Net MVC 4中的新Bundling机制有疑问。看起来默认Bundling只支持JS \ CSS的处理。但它不支持jQuery template(组合和编译为JS代码)。

我发现Cassette以很好的方式支持它 - http://getcassette.net/documentation/v2/html-templates/jquery-tmpl。 Cassette可以将模板编译成javascript文件以减少客户端工作。但我在buildin捆绑中找不到类似的功能。

我知道,存在允许自定义它的IBundleTransform接口。但是,是否已经存在允许在服务器端编译jQuery模板的BundleTransform扩展?

2 个答案:

答案 0 :(得分:4)

这是我用于车把模板

的原因

模板示例:位于〜/ Templates / template123.html

中的文件
<script id="template123" type="text/html">
    <div>someTemplate</div>
</script>

在BundleConfig中:

bundles.Add(new Bundle("~/templates/handlebars").IncludeDirectory("~/Templates", "*.html", true));

添加了以下RazorExtension:

public static class RazorExtensions
{        
    public static IHtmlString RenderTemplates(this HtmlHelper htmlHelper, string src)
    {
        var context = htmlHelper.ViewContext.HttpContext;
        if (string.IsNullOrEmpty(src) || context == null || context.Request.Url == null)
        {
            return null;
        }
        using (WebClient Client = new WebClient())
        {
            var request = context.Request;
            var url = request.Url.Scheme + "://" + request.Url.Authority + Scripts.Url(src).ToHtmlString();
            var content = Client.DownloadString(url);

            return new MvcHtmlString(content);
        }

    }

}

在我的剃刀页面上:

@Html.RenderTemplates("~/templates/handlebars")

答案 1 :(得分:2)