ASP.NET MVC 最好的视图引擎是什么?

分别从性能和稳定的方面考虑一下:Spark、NHaml、Razor等。
2024-12-16 09:36:36
推荐回答(2个)
回答1:

1. ASPX View Engine

第一个也是我们最熟悉的---aspx,相信做过WebForm开发对Aspx都比较了解:

小示例:

<%@ Control Inherits="System.Web.Mvc.ViewPage>" %>
<% if(model.Any()) { %>


    <% foreach(var p in model){%>
  • <%=p.Name%>

  • <%}%>

<%}else{%>

No products available


<%}%>

设计目标:
一个用于呈现Web Froms页面的输出的视图引擎。

优点:
•与ASP.NET MVC紧密集成
•对于以往ASP.NET开发人员有更好体验
•智能感应
•能选择其它语言的 CodeDom provider (例如: C#, VB.NET, F#, Boo, Nemerle)
•立即编译或预编译的views
缺点:
•在Asp.net MVC中容易与经典的Asp.net模式混淆起来,并且Asp.net MVC已不再支持它们。 (例如: ViewState PostBack)
•能有助于反模式的"标签团"
•智能感应强迫样式总是不在内联的代码块。
•设计简单模板时会凌乱。

2. Razor View

在Asp.net MVC 3 版本引入的, 可以支持UnitTest,也容易上手。

优点:
•结构紧凑,表达式流畅
•易于学习
•是不是一门新的语言
•具有很好的智能感知
•可以单元测试
•无处不在集成于ASP.NET MVC

缺点:
•创建一个稍微轻量级的“标签团”问题。服务器端标签实际上提供了围绕服务器的结构代码和非服务器端代码,Razor混淆HTML和服务器端代码,纯HTML和JS的开发具有挑战性(看具体的例子#1),你最终不得不“escape”的HTML和 / 或JavaScript标签 在某些常见的情况。
•封装可重用差:这是不切实际的调用Razor模板就好像它是一个普通的方法 - 在实践中Razor可以调用的代码,但反之则不然,它可以鼓励混合代码和呈现内容。
•语法是面向HTML生成非HTML的内容可能会非常棘手。尽管这样,Razor的数据模型实际上只是字符串串联,语法和嵌套错误,既不是静态或动态检测,虽然VS.NET设计时帮助减轻这个有确点。可维护性和可重构性也受限于此。

示例代码#1

@{

Team Members

string[] teamMembers = {"Matt", "Joanne", "Robert"};
foreach (var person in teamMembers)
{

@person


}
}

3. Hasic

Hasic 是一个用VB.NET’s XML literals的Asp.net MVC 引擎

优点:
•编译时检查有效的XML
•语法着色
•完整的IntelliSense
•编译视图
•可扩展性使用常规的CLR类,函数等
•无缝的组合性和操纵,即使它是普通的VB.NET代码
•可单元测试

缺点:
•性能:构建整个DOM,然后将它发送给客户端。

例子:
Protected Overrides Function Body() As XElement
Return _

Hello, World



End Function

了解更多

4. Bellevue

Bellevue 是一个Asp.net MVC框架的开源模板原形,以HTML为其核心没有其它更多的语法。

• 遵循HTML一类的语言,而不是把它当作“只是文本”。
• 不要惹我的HTML!从HTML的数据绑定的代码应该是分离的。
• 执行严格的模型 - 视图分离

了解更多

5. Spark View Engine

另一个有趣的ASP.NET MVC与Castle项目MonoRail框架的View engine

设计目标:
理念是允许的HTML占主导地位的流和代码,以适应无缝。

优点:
•产生更可读的模板
•C#智能感知(VS2008没有ReSharper的)
•SparkSense插件在VS2010(与ReSharper的)
•提供一个强大的绑定功能,以摆脱你的Views中的所有代码,并允许您轻松地创造你自己的HTML标签

缺点:
•没有明确的模板逻辑的分离,从literal标记(这可以减轻命名空间前缀)

示例:


  • ${p.Name}



No products available





回答2:

绝对的 Razor。。