我注意到 Scott Guthrie 开始 mention Razor一个fair bit在他的博客上,但我只是不确定它是否适合我的风格。
当然,对于那些非常习惯“标准”类型 ASP.Net 标记(内容占位符和内联代码)的人来说,这是一种相当陌生的风格,但感觉就像有很多额外的页面需要管理和不太清晰的标记对我来说。
其他人对此有何感受?您认为在搭建新的 MVC 页面时应该认真考虑这一点,还是只是试图解决一个不存在的问题?
最佳答案
[免责声明:我是 MVC 和 Razor 的 Microsoft 开发人员之一,所以我可能有点偏见:)]
我们将 Razor 设计为一种简洁的模板语言,仅使用最少量的控制字符。我想说的是,与使用“传统”WebForms 语法的相同代码相比,您的大部分 View 可以用更少的字符来表达。
例如以下 ASPX 语法中的代码片段:
<% if(someCondition) { %>
<ol>
<% foreach(var item in Model) { %>
<li><%: item.ToString() %></li>
<% } %>
</ol>
<% } %>
在 Razor 中可以表示如下:
@if(someCondition) {
<ol>
@foreach(var item in Model) {
<li>@item.ToString()</li>
}
</ol>
}
虽然 ASPX 版本有 21 个过渡字符( <%
和 %>
),但 Razor 版本只有 3 个( @
)
我想说Razor的优点如下:
- 简洁的语法,与编写常规 C# 代码的方式非常相似(请查看 Phil Haack 最近发表的博客文章,比较 Asxp 与 Razor 语法:http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx)
- 输出自动 HTML 编码(有助于保护您免受 html 注入(inject)攻击)
- 内置(尽管不是 100%)标记验证,可帮助您避免标签不平衡
与页面相关的概念也可以轻松地从 ASPX 中映射
- 如您所见,仍然允许内联代码
- 部分(可以是可选的)相当于内容占位符
- 布局页面而不是母版页
- 完整 View 和部分 View 的概念是相同的
-
@functions { ... }
block 而不是<script runat="server"> ... </script>
此外,Razor 有许多有用的概念,我认为这些概念比 ASPX 中提供的概念更好:
-
@helper
函数可以非常轻松地创建发出标记的函数 -
@model
关键字用于指定 View 的模型类型,而无需编写<%@ Page ...
带有完整类名的指令
我想我们已经解决了一个真正的问题,那就是让您能够更轻松地编写简洁且符合标准的 View ,同时为您提供重构通用代码的方法。
当然,并不是每个人都会喜欢这种语法,这就是为什么我们也完全支持 ASPX View 引擎。此外,您还可以查看 Spark 和 NHaml,它们是两个拥有大量社区追随者的第三方 View 引擎。以下博客文章对不同产品进行了很好的比较:Link
关于asp.net-mvc - Razor 语法在 UI 标记方面是否提供了令人信服的优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4019740/