mck*_*mey 338 asp.net-mvc viewengine spark-view-engine razor
我一直在搜索SO和Google,了解可用于ASP.NET MVC的各种视图引擎,但是没有找到比视图引擎的简单高级描述更多的内容.
我不一定在寻找"最佳"或"最快",而是在各种情况下对主要参与者(例如默认的WebFormViewEngine,MvcContrib View Engines等)的优缺点进行实际比较.我认为这对确定从默认引擎切换是否对给定项目或开发组有利有用.
有没有人遇到这样的比较?
mck*_*mey 429
由于综合列表似乎不存在,让我们在这里开始一个.如果人们添加他们的经验(特别是为其中一个做出贡献的人),这对ASP.NET MVC社区具有重要价值.任何实现IViewEngine
(例如VirtualPathProviderViewEngine
)的东西都是公平的游戏.只需将新视图引擎按字母顺序排列(将WebFormViewEngine和Razor保留在顶部),并尝试在比较中保持客观.
System.Web.Mvc.WebFormViewEngine
设计目标:
一个视图引擎,用于将Web窗体页面呈现给响应.
优点:
缺点:
例:
<%@ 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>
<%}%>
Run Code Online (Sandbox Code Playgroud)
设计目标:
优点:
缺点:
例#1(注意"string [] ..."的位置):
@{
<h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
foreach (var person in teamMembers)
{
<p>@person</p>
}
}
Run Code Online (Sandbox Code Playgroud)
设计目标:
- 将HTML视为一流语言,而不是将其视为"只是文本".
- 不要乱用我的HTML!数据绑定代码(Bellevue代码)应与HTML分开.
- 实施严格的模型 - 视图分离
设计目标:
Brail视图引擎已从MonoRail移植到Microsoft ASP.NET MVC框架.有关Brail的介绍,请参阅Castle项目网站上的文档.
优点:
缺点:
例:
<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>
Run Code Online (Sandbox Code Playgroud)
Hasic使用VB.NET的XML文字而不是大多数其他视图引擎的字符串.
优点:
缺点:
例:
Protected Overrides Function Body() As XElement
Return _
<body>
<h1>Hello, World</h1>
</body>
End Function
Run Code Online (Sandbox Code Playgroud)
设计目标:
优点:
WebFormViewEngine
设计目标:
Rails Haml视图引擎的.NET端口.来自Haml网站:
Haml是一种标记语言,用于干净简单地描述任何Web文档的XHTML,而不使用内联代码...... Haml避免了将XHTML显式编码到模板中的需要,因为它实际上是XHTML的抽象描述,用一些代码来生成动态内容.
优点:
缺点:
例:
@type=IEnumerable<Product>
- if(model.Any())
%ul
- foreach (var p in model)
%li= p.Name
- else
%p No products available
Run Code Online (Sandbox Code Playgroud)
NVelocityViewEngine(MvcContrib)
设计目标:
一个基于NVelocity的视图引擎, 它是流行的Java项目Velocity的.NET端口 .
优点:
缺点:
例:
#foreach ($p in $viewdata.Model)
#beforeall
<ul>
#each
<li>$p.Name</li>
#afterall
</ul>
#nodata
<p>No products available</p>
#end
Run Code Online (Sandbox Code Playgroud)
设计目标:
优点:
缺点:
例:
<c:if test="${not fn:empty(Page.Tiles)}">
<p class="note">
<fmt:message key="page.tilesSupport"/>
</p>
</c:if>
Run Code Online (Sandbox Code Playgroud)
设计目标:
这个想法是允许html控制流程和代码以无缝地适应.
优点:
缺点:
例:
<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>
Run Code Online (Sandbox Code Playgroud)
设计目标:
- 轻巧.没有创建页面类.
- 快速.模板将写入响应输出流.
- 缓存.模板已缓存,但使用FileSystemWatcher检测文件更改.
- 动态.模板可以在代码中动态生成.
- 灵活.模板可以嵌套到任何级别.
- 符合MVC原则.促进UI和业务逻辑的分离.所有数据都是提前创建的,并传递给模板.
优点:
缺点:
Wing Beats是用于创建XHTML的内部DSL.它基于F#并包含ASP.NET MVC视图引擎,但也可以单独用于创建XHTML的功能.
优点:
缺点:
设计目标:
从熟悉的XSLT构建视图
优点:
缺点:
nat*_*j07 17
我目前的选择是Razor.它非常干净,易于阅读,并使视图页面易于维护.还有intellisense支持,这真的很棒.ALO,当与web帮助器一起使用时,它也非常强大.
提供一个简单的样本:
@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>
Run Code Online (Sandbox Code Playgroud)
你有它.这非常干净,易于阅读.当然,这是一个简单的例子,但即使在复杂的页面和表单上,它仍然很容易阅读和理解.
至于缺点?到目前为止(我是新手)当使用表单的一些助手时,缺乏对添加CSS类引用的支持,这有点烦人.
谢谢Nathj07
归档时间: |
|
查看次数: |
104322 次 |
最近记录: |