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


88

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

对于那些习惯于使用“标准”类型的ASP.Net标记(内容占位符和内联代码)的人来说,这是一种相当陌生的样式,但是感觉就像要管理很多额外的页面,而对我来说却不太清晰。

其他人对此有何感想?您是否认为应该在构架新的MVC页面时认真考虑某些问题,还是只是试图解决不存在的问题?


3
我实际上认为,对于熟悉常规视图引擎的人来说,语法很容易。您仅使用@而不是<%,并且不关闭代码块...
Jaco Pretorius

您可以尝试使用此转换器。有关更多信息,请查看此博客文章
乔治·K

Answers:


153

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

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

例如,以下使用ASPX语法的代码段:

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

可以用剃刀表示如下:

@if(someCondition) {
   <ol>
   @foreach(var item in Model) {
      <li>@item.ToString()</li>
   }
   </ol>
}

ASPX版本具有21个过渡字符(<%%>),而Razor版本只有3个(@

我会说剃刀的优点如下:

  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,这是两个受到社区广泛关注的第三方视图引擎。以下博客文章对不同产品进行了很好的比较:http : //blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx


7
感谢您提供一个非常清晰,彻底的答案。这改变了我的观点,足以给剃刀一个不错的机会。
Phil.Wheeler,2010年

2
Aaron,您可以将Razor和Aspx混合在一起并进行匹配,因此,如果您希望一次可以将项目转换为一页(唯一的缺点是您必须以Razor格式复制母版页,因为要使用Razor视图使用不支持aspx母版页)
2011年

1
如何在HTML中添加@符号?例如<a href="mailto:john@aol.com">
克里斯·S

9
@Chris Escape it:@@
BrunoLM 2011年

6
作为对此文章的更新,我已经在过去的三四个月内使用Razor,并且现在已经习惯了Razor,所以我认为我不能轻松地回到传统的ASP.Net标记。
Phil.Wheeler 2011年

3

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

此外,将代码隐藏和页面的整个定义简化为单个@model model

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.