我一直在搜索SO &ASP.谷歌中的各种视图引擎的详细说明。NET MVC,但没有发现更多的简单的高级描述什么是视图引擎。
我并不一定是在寻找“最好”或“最快”,而是在各种情况下对主要玩家(例如默认的WebFormViewEngine, MvcContrib视图引擎等)的优点/缺点进行一些真实世界的比较。我认为这将有助于确定从默认引擎切换是否对给定的项目或开发组有利。
有人遇到过这样的比较吗?
我知道这并不能真正回答你的问题,但是不同的视图引擎有不同的目的。例如,Spark视图引擎旨在通过尝试使所有内容流畅且可读来消除您的视图中的“标签汤”。
最好的办法是只看一些实现。如果它看起来对您的解决方案的意图有吸引力,请尝试一下。你可以在MVC中混合和匹配视图引擎,所以如果你决定不使用特定的引擎,这应该不是一个问题。
由于似乎不存在一个全面的列表,让我们从SO开始。这对ASP是很有价值的。NET MVC社区,如果人们添加他们的经验(特别是任何对其中之一做出贡献的人)。任何实现IViewEngine的东西(例如VirtualPathProviderViewEngine)在这里都是公平的游戏。只需按字母顺序排列新的视图引擎(将WebFormViewEngine和Razor留在顶部),并尝试在比较中保持客观。
IViewEngine
VirtualPathProviderViewEngine
System.Web.Mvc.WebFormViewEngine . webformviewengine
设计目标:
用于渲染对象的视图引擎
优点:
缺点:
例子:
<%@ Control Inherits="System.Web.Mvc.ViewPage<IEnumerable<Product>>" %> <% if(model.Any()) { %> <ul> <% foreach(var p in model){%> <li><%=p.Name%></li> <%}%> </ul> <%}else{%> <p>No products available</p> <%}%>
System.Web.Razor .net
反例#1(注意“string[]…”的位置):
@{ <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"}; foreach (var person in teamMembers) { <p>@person</p> } }
Bellevue
尊重HTML作为一流的语言,而不是把它当作“文本”。 不要乱动我的HTML!数据绑定代码(Bellevue代码)应该与HTML分开。 执行严格的模型-视图分离
Brail
Brail视图引擎已被移植 从单轨铁路到与 微软的ASP。NET MVC框架。为 关于巴西语的介绍,请参见 城堡项目的文档 网站< / > . < / p >
<html> <head> <title>${title}</title> </head> <body> <p>The following items are in the list:</p> <ul><%for element in list: output "<li>${element}</li>"%></ul> <p>I hope that you would like Brail</p> </body> </html>
Hasic
Hasic使用VB。NET的XML文字,而不是像大多数其他视图引擎的字符串。
Protected Overrides Function Body() As XElement Return _ <body> <h1>Hello, World</h1> </body> End Function
NDjango
类的实现 .NET上的Django模板语言 平台,使用f#语言. .
WebFormViewEngine
NHaml
< p >。Rails Haml视图引擎的NET端口。 从Haml网站: < / p > Haml是一种标记语言 简洁明了地描述 XHTML的任何web文档,没有 内联代码的使用…Haml避免了 需要显式地将XHTML编码到 模板,因为它实际上 XHTML的抽象描述, 用一些代码生成动态 内容。< / p >
@type=IEnumerable<Product> - if(model.Any()) %ul - foreach (var p in model) %li= p.Name - else %p No products available
NVelocityViewEngine (MvcContrib)
视图引擎 NVelocity是一个。net端口 流行的Java项目 速度 . < / p >
#foreach ($p in $viewdata.Model) #beforeall <ul> #each <li>$p.Name</li> #afterall </ul> #nodata <p>No products available</p> #end
SharpTiles
SharpTiles是JSTL的部分端口 结合瓷砖后面的概念 框架(从Mile stone 1开始). .框架(从Mile stone 1开始)
SharpTiles是JSTL的部分端口 结合瓷砖后面的概念 框架(从Mile stone 1开始).
<c:if test="${not fn:empty(Page.Tiles)}"> <p class="note"> <fmt:message key="page.tilesSupport"/> </p> </c:if>
Spark View Engine
这个想法是允许html 控制流程和代码以适应 无缝. < / p >
<viewdata products="IEnumerable[[Product]]"/> <ul if="products.Any()"> <li each="var p in products">${p.Name}</li> </ul> <else> <p>No products available</p> </else> <Form style="background-color:olive;"> <Label For="username" /> <TextBox For="username" /> <ValidationMessage For="username" Message="Please type a valid username." /> </Form>
StringTemplate视图引擎MVC
轻量级的。不创建页类。 快。模板被写入响应输出流。 <李>缓存。模板被缓存,但利用FileSystemWatcher进行检测 李文件更改。< / > 动态的。模板可以在代码中动态生成。 灵活。模板可以嵌套到任何级别。 符合MVC原则。促进UI和业务的分离 逻辑。所有数据都是提前创建的 时间,并传递给模板
翅膀拍打
Wing Beats是用于创建XHTML的内部DSL。它基于f#,并包含一个ASP。NET MVC视图引擎,但也可以仅用于其创建XHTML的能力。
XsltViewEngine (MvcContrib)
从熟悉的XSLT构建视图
我认为这个列表还应该包括每个视图引擎的样本,这样用户就可以在不访问每个网站的情况下了解每个视图引擎。
图片胜过千言万语,标记示例就像视图引擎的截图:)所以这里有一个来自我最喜欢的Spark视图引擎
<viewdata products="IEnumerable[[Product]]"/> <ul if="products.Any()"> <li each="var p in products">${p.Name}</li> </ul> <else> <p>No products available</p> </else>
我喜欢ndjango。它非常容易使用和非常灵活。您可以使用自定义标记和过滤器轻松扩展视图功能。我认为“与f#紧密相关”是优势而不是劣势。
检查这个SharpDOM。这是一个c# 4.0内部dsl,用于生成html和asp.net mvc视图引擎。
我目前的选择是Razor。它非常干净,易于阅读,保持视图页面非常容易维护。还有智能感知支持,这真的很棒。另外,当与网络助手一起使用时,它也非常强大。
提供一个简单的示例:
@Model namespace.model <!Doctype html> <html> <head> <title>Test Razor</title> </head> <body> <ul class="mainList"> @foreach(var x in ViewData.model) { <li>@x.PropertyName</li> } </ul> </body>
结果出来了。这是非常干净,容易阅读。当然,这是一个简单的例子,但即使在复杂的页面和表单上,它仍然非常容易阅读和理解。
至于缺点呢?好吧,到目前为止(我是新手),当使用一些表单的助手时,缺少对添加CSS类引用的支持,这有点烦人。