使用备用ASP.NET MVC视图引擎有什么好处?

时间:2009-06-24 21:08:37

标签: asp.net-mvc viewengine

我看过一般的嫌疑人...... Spark,NHaml等。对于那些对< %%>感到不舒服的人来说,他们似乎都是语法糖。句法。还有其他有形的好处吗?在我看来,句法糖并不是改变整个视图引擎的充分理由。

到目前为止发布的原因:

  1. 更容易从不同的平台转换
  2. 更自然的上下文切换
  3. 更好地分离关注点
  4. 更少的代码行
  5. 更好地抵制跨站点脚本
  6. 更好的XHTML合规性

4 个答案:

答案 0 :(得分:8)

人们对<% %>语法感到不舒服的原因并不是它包含很多语法盐,而是它使视图以代码为中心,这可能会违背MVC将视图视为尽可能愚蠢的概念。例如,Spark的目标是“允许html统治流程,代码无缝地适应”。因此,实际的好处是更容易遵循MVC的精神。

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

如果以上只是语法糖,那么ASP.NET MVC本身就是ASP.NET Web Forms之上的语法糖。

答案 1 :(得分:2)

从nhaml角度来看

  • 使观点更加简洁

Nhaml视图(274个字符)

%h2= ViewData.CategoryName
%ul
  - foreach (var product in ViewData.Products)
    %li
      = product.ProductName 
      .editlink
        = Html.ActionLink("Edit", new { Action="Edit" ID=product.ProductID })
= Html.ActionLink("Add New Product", new { Action="New" })

aspx视图(665个字符)

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="List.aspx" Inherits="MvcApplication5.Views.Products.List" Title="Products" %>
<asp:Content ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
  <h2><%= ViewData.CategoryName %></h2>
  <ul>
    <% foreach (var product in ViewData.Products) { %>
      <li>
        <%= product.ProductName %> 
        <div class="editlink">
          (<%= Html.ActionLink("Edit", new { Action="Edit", ID=product.ProductID })%>)
        </div>
      </li>
    <% } %>
  </ul>
  <%= Html.ActionLink("Add New Product", new { Action="New" }) %>
</asp:Content>

它通过一系列速记字符来完成。请点击此处查看完整列表[http://code.google.com/p/nhaml/wiki/NHamlLanguageReference]

  • 部分和布局

最好看这里[http://code.google.com/p/nhaml/wiki/PartialsAndLayouts]

  • 默认情况下(通过配置)htmlencoding所有内容以避免XSS

  • 符合XHTML的输出

从火花的角度来看

  • 嵌入代码到xml标签中,自定义代码标签可用于执行底层动作。这一切都允许spark最小化nhaml和aspx发生的上下文切换。

例如这个火花

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

aspx和nhaml会要求您执行上下文切换以执行if..else语句。

参考

[http://code.google.com/p/nhaml/wiki/NHamlLanguageReference]

[http://sparkviewengine.com/documentation/syntax]

答案 2 :(得分:0)

句法糖以什么方式?那么你可以学习另一种语法吗?不。这些引擎对于从其他平台迁移的开发人员非常有用。让他们的生活更轻松。

答案 3 :(得分:0)

是的,请参阅HTML generator for .NET?

您希望在普通的c#代码中具有相同的可重构性。它是代码,因此您希望能够以相同的方式构造它。使用继承,组合,参数,循环,递归等。