zoukankan      html  css  js  c++  java
  • Mvc 模板化的Razor引擎委托

      最近在研究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>。

  • 相关阅读:
    个人总结05
    微软拼音的用户体验
    个人总结04
    典型用户和用户场景模式
    个人总结03
    个人总结02
    构建之法阅读笔记06
    个人总结01
    学习进度条——第七周
    WebApi学习总结系列第五篇(消息处理管道)
  • 原文地址:https://www.cnblogs.com/tomkluas/p/4813231.html
Copyright © 2011-2022 走看看