2010-07-04 158 views
39

阅读Scott Guthrie的博客文章,了解有关ASP.NET MVC的新Razor视图引擎并阅读此question比较可用视图引擎。ASP.NET MVC剃刀视图引擎

Razor似乎解决了默认视图引擎的大部分问题。作为开发人员,哪些功能差异会使您成为一个引人注目的选择?缺乏哪些功能会阻止您使用它?

+4

这应该是CW? – 2010-07-07 08:09:54

+0

我这么认为。 但是,男人,剃刀不能很快到达这里。 – 2010-07-27 06:46:04

回答

20

除了标记语言之外,还有很多可以查看引擎的东西。我会怀念几星火特点:

  • 使用相同的标记语言编写HTML扩展,不C#(宏) - 我看到剃刀也支持这一点,我希望它支持方法/参数覆盖;
  • 自定义标签(写_Tag.spark使用<标签/ >);
  • 自动生成的变量,如varIsFirst,varIndex等;
  • 特殊表达形式(?{}为条件属性,$!{}跳过错误等);
  • 很好的主/部分布局支持,包括部分指定标记的部分应该只在主内渲染一次(例如脚本包含);
  • 您仍然可以拥有WebForms标记 - 非常适合兼容性和增量升级;
  • 支持在对方内使用“”和“'引号(非常有用)。

我喜欢循环/ IFS更星火语法 - 混合HTML < >和C#{}括号看起来并不太好 - 但是这纯属个人意见。

剃刀也有非常有前途的功能,例如,内联模板。鉴于Spark的创造者被微软聘用,我认为Razor有很好的写作能力,非常有用,并且支持很好的视图引擎。当然,我不会用Razor重写数百个Spark视图(虽然我用Spark重写了几十个WebForms视图)。但我一定会认真看待剃刀 - 我只是从你的问题中发现了这一点,谢谢 - 我现在看到的看起来很有希望。当然,它不与WebForms竞争(任何视图引擎都优于WebForms),但如果您还没有投入太多的视觉引擎,它对于新的ASP.NET MVC项目来说看起来是个不错的选择。

+0

re:'autogenerated variables' - 你可以使用John Skeet非常聪明的'SmartEnumerable'类来实现这个与剃刀/网页表单:http://www.yoda.arachsys.com/csharp/miscutil/usage/smartenumerable.html – 2010-12-31 11:46:46

4

很显然我还没有在实践中对它进行过评估,但事实上它比ASPX引擎更具挑战性,是诱导开关最引人注目的特征。我只希望它能更好地自动格式化。事实上,它将得到Intellisense的支持并与MVC一起交付,这使其成为启动新项目的自然选择。在我进行切换之前,我会在一个小型项目上公平地采取行动。仅仅通过阅读文章,我没有看到任何我无法做到的事情,我现在正在用ASPX引擎做。

更新:我一直在使用Razor一年多,并且永远不会回到ASPX引擎。语法看起来非常自然和富有表现力。

+0

你有没有考虑过使用Spark?有关Spark提供的其他功能列表,请参阅queen3的答案。 – Ryan 2010-07-04 23:34:17

+1

不幸的是,Spark智能感知支持并不是很好(特别是在VS2010中),这对许多开发者来说可能是一个阻碍。但支持正在开发,所以希望事情会得到改善。 – queen3 2010-07-05 10:07:21

+1

我觉得如果你需要Intellisense,你觉得你太复杂了。当然,我的视图的90%内容看起来像'!{Html.EditTemplateFor(x => x.Quantity)}',所以我只需要知道一些关键的帮助器方法和我的视图模型的属性。我认为Intellisense的缺乏实际上帮助我将事情简单化。 – Ryan 2010-07-09 14:02:57

0

除了更干净的外观,布局部分的灵活性看起来非常好,并且声明式HTML帮助程序看起来非常有用。到目前为止,没有看到使用它的任何缺点,但当然必须在实践中尝试一下。

23

单元测试:新的视图引擎 实施将支持 能力进行单元测试的看法(不 需要一个控制器或网络服务器, 并且可以在任何单元测试 项目主办 - 没有特殊的应用 - 需要域 )。

最后!!!简直不敢相信微软用了将近8年的时间才终于推出了支持这一功能的视图引擎。

0

剃刀使用方括号,也就是foreach的东西。 Spark在此使用XML标记。

因此,Spark完全支持每个XML处理器对视图文件的解析和分析。

Mabye这不是一件大事,但显示了一致性和可扩展性。

+0

这就是我喜欢的部分火花... – 2010-11-15 07:42:35

15

对我来说有三个令人信服的理由:

  1. 编译 - 剃刀视图可以被编译成一个DLL。最后,我们在.NET Web项目中获得了适当的可重用性。我可以有一个业务对象,知道如何显示自己,而不会将该代码作为.ascx文件在Web项目的某个部分中浮动。

  2. 可测性 - 因为它被编译为一个类,所以我可以编写一个单元测试并抛出对象的模拟实例,以查看HTML是否正确。

  3. 智能感知简洁的语法都不错,但不是最重要的部分。

+0

你有更多的信息在'汇编'在你的项目符号点?链接,也许?提前致谢。 – Buildstarted 2010-07-27 15:55:28

+0

是的,在ScottGu的关于Razor的博客文章的评论中提到了对类库的支持计划: http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx# 7553475 Quote: “re:介绍”Razor“ - 一个新的ASP视图引擎。NET 2010年7月3日星期六下午12:14作者ScottGu @Chris, > 1)这些可以预编译或作为资源嵌入到程序集中吗? 是的 - 这是我们希望在帖子中没有提到的事情之一。我们计划让您将它们添加到类库项目中并将它们编译为程序集。 ... ScottGu“ – Quango 2010-07-28 16:01:11

+0

啊,难怪我没有看到它......总是对他的帖子发表数百万条评论:)谢谢 – Buildstarted 2010-07-28 19:35:49