我查看了常见的嫌疑人...Spark、NHaml 等。对于那些对 <% %> 语法感到不舒服的人来说,它们似乎都是语法糖。还有其他切实的好处吗?在我看来,语法糖并不是改变整个视图引擎的充分理由。
到目前为止发布的原因:
- 更容易从不同的平台过渡
- 更自然的上下文切换
- 更好地分离关注点
- 更少的代码行
- 更好地抵抗跨站点脚本
- 更好的 XHTML 合规性
我查看了常见的嫌疑人...Spark、NHaml 等。对于那些对 <% %> 语法感到不舒服的人来说,它们似乎都是语法糖。还有其他切实的好处吗?在我看来,语法糖并不是改变整个视图引擎的充分理由。
到目前为止发布的原因:
人们对语法感到不舒服的原因<% %>
不是它包含很多语法盐,而是它使 Views以代码为中心,这可能与 MVC 使 Views 尽可能愚蠢的概念背道而驰。例如,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 窗体之上的语法糖。
从 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 兼容输出
从火花的角度
例如这个火花
<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 和 naml 将要求您进行上下文切换以执行 if..else 语句的代码。
参考
[ http://code.google.com/p/nhaml/wiki/NHamlLanguageReference]
语法糖以什么方式?这样您就可以学习另一种语法?不,这些引擎对从其他平台迁移的开发人员非常有用。让他们的生活更轻松。
是的,请参阅.NET 的 HTML 生成器?
您希望在普通 c# 代码中具有相同的可重构性。它是代码,因此您希望能够以相同的方式构造它。使用继承、组合、参数、循环、递归等。