MVC扩展(Templated Razor Delegates)

概念请参考:http://www.cnblogs.com/jingtao/archive/2010/08/18/1802454.html

简单来说就是Razor实现的一个模板引擎,根据自己业务传入数据参数并生成数据。模板引擎的最大作用就是显示与业务分离,代码重用更容易提高开发效率。

先看一段代码

@{
    Func<LogOnModel, object> display = @<p>
                                            <p>UserName: @item.UserName</p>
                                            <p>Password:@item.Password</p>
                                        </p>;
}
@display(Model)

这里构建了一个委托。传入参数是LogOnModel.等号右边则是一个模板。好处是这个模板支持智能提示。

模板当作参数

当有新的业务当我们要改变显示方式,上面的代码就不能使用了。再改造一下把模板当作参数传入

@functions {   

    public static HelperResult Generate<T>(T o, Func<T, HelperResult> template)
    {

        return new HelperResult(writer => writer.Write(template(o)));  

      }   

}   

@Generate(Model,
          @
<p> <p>UserName: @item.UserName</p> <p>Password:@item.Password</p> </p>

 
)

Generate方法第二个参数模板做为参数传入,实参的类型是Func<T, HelperResult>, T代表模板接受的数据。

一个更有趣的扩展:

http://haacked.com/archive/2011/04/14/a-better-razor-foreach-loop.aspx

原文地址:https://www.cnblogs.com/miku/p/2864479.html