Razor语法在UI标记中提供了一个引人注目的优势吗?

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

对于那些习惯于“标准”的ASP.Net标记(内容占位符和内联代码)的人来说,这是一种相当陌生的风格,但是感觉就像很多其他的页面来pipe理,并且对我来说标记不太清晰。

其他民族对此有何感想? 是不是应该在脚手架新的MVC页面时认真考虑这个问题,还是仅仅试图解决一个不存在的问题?

3 Solutions collect form web for “Razor语法在UI标记中提供了一个引人注目的优势吗?”

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

我们将Razordevise成一个简洁的模板语言,只使用最less量的控制字符。 我会说,你的意见的大部分可以用比“传统的”WebForms语法相同的代码less的字符来表示。

例如下面的ASPX语法代码片段:

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

在剃刀中可以expression如下:

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

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

我会说剃刀的优点如下:

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

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

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

另外,Razor有许多有用的概念,我会说比ASPX中的更好:

  • @helper函数可以非常容易地创build发布标记的函数
  • @model关键字,用于指定视图的模型types,而无需使用完整的类名写入<%@ Page ...指令

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

当然,不是每个人都会喜欢这个语法,这就是为什么我们也完全支持ASPX视图引擎。 另外,您可以查看Spark和NHaml,这是两个第三方视图引擎,享受重要的社区关注。 下面的博客文章有不同的产品比较: http : //blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx

就我个人而言,我真的很感激减less了多less个转义字符的使用。 与@{}相比,使用<% %>变得非常繁琐,而且在语法上几乎没有吸引力。

而且,为代码隐藏和页面编写完整的定义被简化为一个@model model

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

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

你可以试试这个转换器 。 欲了解更多信息,请查看这篇博文 。

  • MVC @RenderSection“部分已被定义,但尚未呈现”脚本。 当多层次的页面
  • 如何将额外的命名空间添加到Razor页面而不是@using声明?
  • 需要razor视图引擎自动完成在类库中工作?
  • 如何在ASP.NET MVC中呈现HTMLstring?
  • Razor View Engine是否适用于Mono?
  • MVC剃刀单选button
  • 使用新的RazorEngine API进行模板化
  • 在jquery.dialog中加载一个局部视图
  • VS 2015 Razor自动完成/智能感应下拉菜单后立即隐藏
  • 模型不绑定在POST方法
  • 剃刀视图引擎 - 如何添加部分视图