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