我注意到斯科特·格思里开始 提及剃须刀 A 公平一点 在他的博客上,但我只是不确定它是否适合我的风格。

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

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

有帮助吗?

解决方案

[免责声明:我是 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-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

其他提示

我个人真正体会在许多转义字符是如何使用的减少。相比<% %>并且几乎没有语法上的吸引力时,使用@{}变得非常乏味。

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

如也由marcind所指出的,不必总是包括runat=server是非常好的也

总之,我真的很感激使用剃刀引擎,并发现它不仅使事情变得更容易对我发展也使得代码更易于阅读。

您可以尝试该转换器。欲了解更多信息,请查看这个博客帖子

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top