ASP.NET MVC Razor视图引擎

在阅读Scott Guthrie关于ASP.NET MVC的新Razor视图引擎的博客文章之后,阅读了比较可用视图引擎的这个问题 。

Razor似乎解决了默认视图引擎的大部分问题。 作为开发人员,哪些function差异会使您成为一个令人信服的select? 缺乏哪些function会阻止您使用它?

除了标记语言之外,还有更多的要查看引擎。 很less有Spark的function,我会错过的:

  • 用相同的标记语言编写html扩展,而不是C#(macros) – 我看到Razor也支持这个,我希望它支持方法/参数覆盖;
  • 自定义标签(写_Tag.spark使用<Tag />);
  • 自动生成的variables,如varIsFirst,varIndex等;
  • 特殊expressionforms(?{}为条件属性,$!{}来跳过错误等);
  • 好的主/部分布局的支持,包括能够部分指定该部分的标记应该只呈现一次在主(例如脚本包括);
  • 您仍然可以拥有WebForms标记 – 非常适合兼容性和增量升级;
  • 支持在对方内使用“”和“”引号(非常有用)。

我喜欢Spark / ifs的Spark语法 – 混合HTML <>和C#{}大括号看起来不太好 – 但这完全是个人观点。

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

unit testing:新的视图引擎实现将支持unit testing视图的能力(不需要控制器或networking服务器,可以在任何unit testing项目中托pipe – 不需要特殊的应用程序域)。

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

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

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

  2. 可testing性 – 当它被编译到一个类中时,我可以编写一个unit testing,并在其上抛出对象的模拟实例,以查看HTML是否正确。

  3. 智能感知Terse语法很好,但不是最重要的部分。

很明显,我还没有在实践中对它进行评估,但是比ASPX引擎更有说服力的事实是引发交换的最引人注目的特征。 我只希望它能更好地自动格式化。 事实上,它将得到Intellisense的支持,并与MVC交付使其成为开始新项目的自然select。 在我进行转换之前,我会在一个小项目上公正地开一下。 仅仅通过阅读文章,我没有看到任何我不能用ASPX引擎做的事情。

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

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

剃刀使用方括号,也就是说,对于foreach东西。 Spark在这里使用XML标签。

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

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