ASP.NET MVC视图引擎比较

 2023-02-17    437  

问题描述

我一直在搜索所以和谷歌的崩溃用于ASP.NET MVC的各种视图引擎,但尚未发现远远超过View引擎的简单高级描述.

我不一定正在寻找”最好的”或”最快的”,而是一些实际的世界与主要球员的利益/缺点的比较(例如,默认WebFormView,MVCContrib View引擎等)进行各种情况.我认为这在确定是否从默认引擎切换到给定的项目或开发组是有利的.

ASP.NET MVC视图引擎比较

有没有人遇到这样的比较?

推荐答案

ASP.NET MVC视图引擎(社区Wiki)

由于似乎没有存在全面的列表,让我们在这里开始一个.如果人们增加了他们的经验,这可能对ASP.NET MVC社区具有很大的价值任何实施IViewEngine(例如VirtualPathProviderViewEngine)都是公平的游戏.只是按字母顺序化新视图引擎(在顶部留下WebFormViewEngine和Razor),并尝试在比较中客观.


system.web.mvc.webormviewengent

设计目标:

用于呈现a的视图引擎
Web表单页面到响应.

优点:

  • 普遍存在,因为它与ASP.NET MVC一起填写
  • 熟悉ASP.NET开发人员的经验
  • Intellisense
  • 可以选择具有CodeDom提供程序的任何语言(例如C#,VB.NET,F#,BOO,Nemerle)
  • 按需编译或预编译视图

缺点:

  • 使用者是通过存在”经典的ASP.NET”模式而混淆,这些模式不再适用于MVC(例如ViewState回发)
  • 可以为”标签汤”的反模式有贡献
  • 代码块语法和强类型可以沿
  • 达到

  • IntelliSense强制执行风格并不总是适合内联代码块
  • 在设计简单模板时,

  • 可以嘈杂

示例:

<%@ 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

设计目标:

优点:

  • 紧凑,富有富有效果和液体
  • 易于学习
  • 不是一种新语言
  • 有很棒的智能isense
  • 单位可测试
  • 普遍存在,船舶与ASP.NET MVC

缺点:

  • 从上面引用的”标签汤”创建一个略微不同的问题.如果服务器标签实际提供服务器和非服务器代码周围的结构,则剃刀会使HTML和服务器代码混淆,使得纯HTML或JS开发具有挑战性(见CON示例#1),因为您最终必须”转义”HTML和/或JavaScript标签在某些非常常见的条件下.
  • 封装较差+再营救率:呼叫剃刀模板是不切实际的,因为它是一种正常方法 – 在实践中,剃刀可以调用代码,但不能反之亦然,这可以鼓励代码和演示.
  • 语法是非常HTML的导向;生成非HTML内容可能是棘手的.尽管如此,剃刀的数据模型本质上仅仅是串联级联,因此语法和嵌套错误既不静态也不动态地检测,但VS.NET设计时间有助于减轻这种情况.可维护性和重构可能因此而受到影响.
  • 没有记录的api , http ://msdn.microsoft.com/en-us/library/system.web.razor.aspx

符号#1(注意字符串[] ……”):

@{
    <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
    foreach (var person in teamMembers)
    {
        <p>@person</p>
    }
}

bellevue

设计目标:

  • 尊重HTML作为一流语言,而不是将其视为”只是文本”.
  • 不要弄乱我的html!数据绑定代码(Bellevue代码)应与HTML分开.
  • 强制模型 – 查看分离

brail

设计目标:

抄波引擎已移植
从单轨局与之合作
Microsoft ASP.NET MVC框架.为了
抄袭介绍,见
在城堡项目上的文档
网站

优点:

  • 在”手腕友好的python语法”
  • 之后建模

  • 按需编译观点(但没有可用的预编译)

缺点:

  • 旨在用语言编写 boo

示例:

<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文字而不是像大多数其他视图引擎一样的字符串.

优点:

  • 有效XML
  • 的编译时间检查

  • 语法着色
  • 完全智能敏感
  • 编译视图
  • 使用常规CLR类,函数等的可扩展性
  • 无缝的可组装性和操作,因为它是常规的VB.NET代码
  • 单位可测试

缺点:

  • 性能:在将其发送到客户端之前构建整个DOM.

示例:

Protected Overrides Function Body() As XElement
    Return _
    <body>
        <h1>Hello, World</h1>
    </body>
End Function

ndjango

设计目标:

ndjango是一个实施
django模板语言 f#language .

优点:

  • ndjango版本0.9.1.0在压力下比WebFormViewEngine 更稳定
  • django模板编辑器,具有语法颜色,代码完成和you-you-type诊断(仅限VS2010)
  • 与ASP.NET集成,城堡MOORAIL和BISTRO MVC框架

nhaml

设计目标:

.NET RAILS HAML View引擎的端口.
来自 haml网站:

haml是一种使用的标记语言
干净地,简单地描述
任何Web文件的XHTML,没有
使用内联代码……哈姆避免
需要将XHTML显式编码为
模板,因为它实际上是
XHTML的抽象描述,
有一些代码生成动态
内容.

优点:

  • 结石结构(即d.r.y.)
  • 良好缩进
  • 清除结构
  • c#intellisense (对于没有重新粗的Vs2008)

缺点:

  • 从XHTML的抽象而不是利用标记的熟悉程度
  • VS2010没有IntelliSense

示例:

@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项目
velocity .

优点:

  • 易于读/写
  • 简洁视图代码

缺点:

  • 在视图中可用的有限帮助方法
  • 不会自动具有Visual Studio集成(IntelliSense,观看观看或重构)

示例:

#foreach ($p in $viewdata.Model)
#beforeall
    <ul>
#each
    <li>$p.Name</li>
#afterall
    </ul>
#nodata 
    <p>No products available</p>
#end

shalptiple

设计目标:

shalptiles是 jstl 的部分端口
与瓷砖相结合
Framework (如英里石1).

优点:

    java开发人员熟悉

  • XML式代码块

缺点:

示例:

<c:if test="${not fn:empty(Page.Tiles)}">
  <p class="note">
    <fmt:message key="page.tilesSupport"/>
  </p>
</c:if>

spark视图引擎

设计目标:

这个想法是允许HTML到
主导流程和代码以适应
无缝.

优点:

  • 产生更可读的模板
  • c#intellisense (对于没有重新粗的Vs2008)
  • sparksense插件为VS2010 (与Resharper一起工作)
  • 提供了一个强大的绑定功能要摆脱所有代码在您的观点中,允许您轻松发明自己的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>

stringtemplate视图引擎mvc

设计目标:

  • 轻巧.没有创建页面类.
  • 快.模板被写入响应输出流.
  • 缓存.模板被缓存,但使用文件系统Watcher来检测
    文件更改.
  • 动态.可以在代码中的飞行中生成模板.
  • 灵活.模板可以嵌套在任何级别.
  • 符合MVC原则.促进UI和业务的分离
    逻辑.所有数据都在前面创建
    时间,并传递到模板.

优点:

    stringtemplate java开发人员熟悉

缺点:

  • 简单的模板语法可以干扰预期的输出(例如 jquery冲突

)


翼拍

翼拍是一个用于创建XHTML的内部DSL.它基于F#,包括ASP.NET MVC视图引擎,但也可以仅用于创建XHTML的能力.

优点:

  • 有效XML
  • 的编译时间检查

  • 语法着色
  • 完全智能敏感
  • 编译视图
  • 使用常规CLR类,函数等的可扩展性
  • 自常规f#代码
  • 以来无缝的可组合性和操作

  • 单位可测试

缺点:

  • 你真的没有写html,而是代表DSL中的HTML的代码.

xsltviewengine(mvccontrib)

设计目标:

从熟悉的xslt

中构建视图

优点:

  • 广泛普遍存在
  • 熟悉XML开发人员的模板语言
  • 基于XML的
  • 时间测试
  • 语法和元素嵌套错误可以静态检测.

缺点:

  • 功能语言风格使流量控制困难
  • xslt 2.0(可能是?)不支持. (XSLT 1.0不太实用).

其他推荐答案

我当前的选择是剃刀.它非常干净且易于阅读,并保持视图页面非常易于维护.还有IntelliSense支持这真的很棒. alos,与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>

和你有它.这非常干净,易于阅读.授予,这是一个简单的例子,但即使在复杂的页面上,表格仍然很容易阅读和理解.

为缺点?到目前为止(我是新的)在使用一些助理的表格中使用一些助手缺乏支持,这是一个有点烦人的CSS类参考.

谢谢
nathj07

其他推荐答案

我知道这并没有真正回答你的问题,但不同的视图引擎有不同的目的.例如, spark视图引擎,例如,通过试图使一切顺利地摆脱你的”标签汤”的看法和可读.

你最好的选择是看一些实现.如果它看起来有吸引力的解决方案的意图,请尝试一下.您可以在MVC中混合和匹配视图引擎,因此如果您决定不使用特定的引擎,则不应该是一个问题.

以上所述是小编给大家介绍的ASP.NET MVC视图引擎比较,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34206.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。