码迷,mamicode.com
首页 > Web开发 > 详细

Mvc 模板化的Razor引擎委托

时间:2015-09-16 15:52:10      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

  最近在研究NopCommerce,它后台用的富文本编辑器可根据语言库加载不同语言的编辑器,其中用到了模板化Razor引擎委托,参考这儿

  废话不多说,直接上代码。

 1 public static class HtmlExtensions
 2     {
 3         public static HelperResult ToList<T>(this IEnumerable<T> items, Func<T, HelperResult> template)
 4         {
 5             return new HelperResult(writer =>
 6             {
 7                 foreach (var item in items)
 8                 {
 9                     template(item).WriteTo(writer);
10                 }
11             });
12         }
13     }

  方法 ToList<T>拓展了IEnumerable<T>,并传递一个Fun<T,out result>参数,Fun中result类型为 HelperResult,HelperResult中有ToHtmlString()方法,可把它转为string字符串, 在方法内部new HelperResult(),在构造函数内将模板生成的html写到HelperResult中。

  在cshtml文件中调用的代码如下:

@{
    var items = new[] { "tom", "kluas", "jerry" };
}
<ul>
    @items.ToList(@<li>@item</li>)
</ul>

  生成的html代码如下:

<ul>
    <li>tom</li>
    <li>kluas</li>
    <li>jerry</li>
</ul>

  调用 @items.ToList(@<li>@item</li>),T为string, @<li>@item</li>为模板,@item为模板中使用的参数,也是ToList<T>方法中foreach循环传递给模板文件的参数,最终生成3条<li>。

Mvc 模板化的Razor引擎委托

标签:

原文地址:http://www.cnblogs.com/tomkluas/p/4813231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!