88

我注意到 Scott Guthrie开始在他的博客上提到 Razor,但我不确定它是否适合我的风格。

当然,对于那些非常习惯于“标准”类型的 ASP.Net 标记(内容占位符和内联代码)的人来说,这是一种相当陌生的风格,但对我来说,它只是感觉需要管理很多额外的页面,而且标记不太清晰。

其他人对此有何感受?您认为在构建新的 MVC 页面时应该认真考虑这一点,还是只是试图解决一个不存在的问题?

4

2 回答 2

153

[免责声明:我是 MVC 和 Razor 的 Microsoft 开发人员之一,所以我可能有点偏见 :)]

我们将 Razor 设计为一种简洁的模板语言,它只使用最少的必要数量的控制字符。我想说,与使用“传统”WebForms 语法的相同代码相比,您的大部分视图可以用更少的字符来表达。

例如下面的 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 版本只有三个(@

我想说 Razor 的优点如下:

  1. 简洁的语法,与编写常规 C# 代码的方式非常相似(查看 Phil Haack 最近比较 Asxp 与 Razor 语法的以下博客文章:http: //haacked.com/archive/2011/01/06/razor-语法快速参考.aspx )
  2. 输出的自动 HTML 编码(有助于保护您免受 html 注入攻击)
  3. 内置(尽管不是 100%)标记验证,可帮助您避免不平衡的标记

与页面相关的概念也很容易从 ASPX 中的内容映射出来

  • 如您所见,仍然允许使用内联代码
  • 部分(可以是可选的)相当于内容占位符
  • 布局页面而不是母版页
  • 全视图和部分视图的概念是相同的
  • @functions { ... }块而不是<script runat="server"> ... </script>

此外,Razor 有许多有用的概念,我想说它们比 ASPX 中可用的概念更好:

  • @helper用于真正轻松创建发出标记的函数的函数
  • @model用于指定视图模型类型的关键字,而无需编写具有<%@ Page ...完整类名的指令

我想我们已经解决了一个真正的问题,那就是让您更轻松地编写简洁且符合标准的视图,同时为您提供重构通用代码的方法。

当然,并不是每个人都喜欢这种语法,这也是我们完全支持 ASPX 视图引擎的原因。此外,您还可以查看 Spark 和 NHaml,这两个 3rd-party 视图引擎享有大量社区关注。以下博客文章对不同产品进行了很好的比较:链接

于 2010-10-26T06:43:09.713 回答
3

就我个人而言,我非常感谢减少使用转义字符的数量。<% %>与相比,使用变得非常乏味,@{}并且在语法上几乎没有吸引力。

此外,为代码隐藏和页面编写完整的定义被简化为单个@model model.

正如 marcind 所指出的,不必总是包含runat=server也非常好。

总的来说,我非常感谢使用 Razor 引擎,并发现它不仅让我更容易开发,而且让代码更容易阅读。

于 2012-03-24T10:46:23.243 回答