WebForms,没觉得有什么不好的。
目前官方的视图引擎有两款:Razor和WebForm,
WebForm的太肿了,而且Control模型在MVC框架已经没用了,所以你可以理解为Razor是WebForm的减肥版,所以这两者之间肯定Razor更好。
但是Razor呢,总体来说我觉得是倒退了,因为Razor回到了ASP、PHP的时代,将HTML和代码杂凑在一起,当然Razor的语法是这种模型中最棒的,在代码和HTML之间的切换非常的流畅和自然,例如:
@foreach( var item in list ) { <div id="@item.ID">xxx</div> }
这比起<%...%>或是<?...?>当然要简单许多,并且由于MVC框架的缘故,像组织数据什么的,是不需要在页面上处理的。
废话说完了来推荐私货,Jumony是一个开源的HTML引擎(注意不是XML引擎,因为Jumony可以正确处理所有浏览器可以处理的HTML文档,不论格式如何),通过HTML解析器将HTML文档解析为DOM,可以抽取数据,或者将HTML作为模板或是http://ASP.NET MVC的视图来使用。将HTML文件作为http://ASP.NET MVC的视图便是Jumony ViewEngine,一个开源的视图引擎。
与其他所有视图引擎不同的是,Jumony的视图是纯粹的HTML,没有任何的代码。当然,Jumony允许你写一些代码来对页面HTML DOM进行一些处理,但是绝大多数的任务都可以透过纯粹的HTML模板来解决。
例如ActionLink:
<a action="Login">Click here to sign in.</a>
例如partial view:
<partial action="Login" controller="Site"></partial>
例如数据绑定:
<img src="{eval path=ImagePath}" /> <script> var item = null;//{eval path=Item} </script>
列表绑定:
<div datamodel="{eval-list path=list}" id="{eval path=ID}">xxx</div>
高级列表绑定:
<div datamodel="{eval-list path=list, selector=.item}"> <div class="item" id="{eval path=ID"><eval path="Content" /></div> <hr /> <div class="item alt" id="{eval path=ID"><eval path="Content" /></div> <hr /> <div class="item" id="{eval path=ID"><eval path="Content" /></div> </div>
样式绑定:
<div style-color="{eval path=IsError, value=red}">xxx</div>
以及URL路径的自动处理等等:
<link href="../styles/main.css" rel="stylesheet" />
Razor要写成:
<link href="@Url.Content("../styles/main.css")" rel="stylesheet" />
最后,任何一个视图引擎都有其适用的范畴,应灵活选择各个视图引擎来快速完成特定的工作。所有符合MVC规范的视图引擎,都可以进行混合渲染,例如Jumony视图引擎可以嵌一个Razor的部分视图,反过来也可以。所以最好的视图引擎就是根据特定的任务,灵活选择最合适的。当然最好是符合MVC的规范,以便于混合渲染。
甚至于,可以自己写一个视图引擎,例如用markdown文件作为视图的视图引擎,,,,,