Razor语法是否在UI标记中提供了引人注目的优势?

Phi*_*ler 88 syntax asp.net-mvc markup razor asp.net-mvc-3

我注意到斯科特·格思里已经开始提剃须刀一个公平位在他的博客,但我只是不那么肯定,这是一个很适合我的风格.

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

其他人的感受是什么?在构建新的MVC页面时,或者它只是试图解决不存在的问题时,您认为应该认真考虑的事情是什么?

mar*_*ind 153

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

我们将Razor设计为一种简洁的模板语言,仅使用最少量的控制字符.我想说,使用"传统"WebForms语法,可以使用比使用相同代码更少的字符来表达视图的大部分内容.

例如,ASPX语法中的以下代码片段:

<% if(someCondition) { %>
  <ol>
  <% foreach(var item in Model) { %>
     <li><%: item.ToString() %></li>
  <% } %>
  </ol>
<% } %>
Run Code Online (Sandbox Code Playgroud)

在Razor中可以表示如下:

@if(someCondition) {
   <ol>
   @foreach(var item in Model) {
      <li>@item.ToString()</li>
   }
   </ol>
}
Run Code Online (Sandbox Code Playgroud)

虽然ASPX版本有21个过渡字符(<%%>),但Razor版本只有三个(@)

我想说Razor的优点如下:

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

与页面相关的概念也可以轻松地映射到ASPX中的内容

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

另外Razor有许多有用的概念,我认为它们比ASPX中的更好:

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

我想我们已经解决了一个真正的问题,即允许您更轻松地编写简洁且符合标准的视图,同时为您提供重构公共代码的方法.

当然,并非所有人都更喜欢这种语法,这也是我们完全支持ASPX视图引擎的原因.此外,您还可以查看Spark和NHaml,它们是两个享有重要社区关注的第三方视图引擎.以下博客文章对不同产品进行了很好的比较:http://blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx

  • @Chris逃脱它:`@@` (9认同)
  • 感谢您提供一个非常清晰和彻底的答案.这改变了我的观点,足以让Razor得到一个不错的机会. (7认同)
  • 作为这篇文章的更新,我在过去的三四个月里一直在使用Razor,现在已经习惯了它,不要以为我可以轻松地回到传统的ASP.Net标记. (6认同)
  • Aaron,你可以将Razor和Aspx混合在一起,所以如果你愿意,你可以一次转换你的项目页面(唯一的缺点是你必须用Razor格式复制你的母版页,因为有一个Razor视图使用一个不支持aspx母版页) (2认同)