Asp.net mvc ASP.NET MVC Razor视图引擎

Asp.net mvc ASP.NET MVC Razor视图引擎,asp.net-mvc,razor,viewengine,Asp.net Mvc,Razor,Viewengine,在阅读了关于ASP.NET MVC新视图引擎的博客文章并比较了可用视图引擎之后 Razor似乎解决了默认视图引擎的大多数问题。作为一名开发人员,什么样的特性差异会使它成为一个引人注目的选择?缺少哪些功能会阻止您使用它?显然,我还没有在实践中对其进行评估,但事实上,它比ASPX引擎更简洁,这是导致切换的最引人注目的功能。我只希望它也能自动格式化得更好。它将得到intellisense的支持,并通过MVC交付,这一事实使它成为启动新项目的自然选择。在我做出改变之前,我将在一个小项目上给它一个公平的机

在阅读了关于ASP.NET MVC新视图引擎的博客文章并比较了可用视图引擎之后


Razor似乎解决了默认视图引擎的大多数问题。作为一名开发人员,什么样的特性差异会使它成为一个引人注目的选择?缺少哪些功能会阻止您使用它?

显然,我还没有在实践中对其进行评估,但事实上,它比ASPX引擎更简洁,这是导致切换的最引人注目的功能。我只希望它也能自动格式化得更好。它将得到intellisense的支持,并通过MVC交付,这一事实使它成为启动新项目的自然选择。在我做出改变之前,我将在一个小项目上给它一个公平的机会。仅仅通过阅读这篇文章,我没有看到任何我目前在使用ASPX引擎时无法做到的事情


更新:我已经使用Razor一年多了,再也不会使用ASPX引擎了。语法看起来非常自然且富有表现力。

除了标记语言之外,还有更多内容可供查看。我将错过的几个Spark功能:

  • 使用相同的标记语言编写html扩展,而不是C#(宏)-我看到Razor也支持这一点,我希望它支持方法/参数重写
  • 自定义标记(写入_Tag.spark以供使用)
  • 自动生成的变量,如varIsFirst、varIndex等
  • 特殊表达式形式(?{}用于条件属性,$!{}用于跳过错误等)
  • 良好的主/局部布局支持,包括在局部中指定标记的一部分只应在主布局中呈现一次的能力(例如,脚本包含)
  • 您仍然可以使用WebForms标记—非常适合兼容性和增量升级
  • 支持在彼此内部同时使用“”和“”引号(非常有用)
我更喜欢循环/ifs的Spark语法——混合使用HTML和C#{}大括号看起来不太好——但这纯粹是个人观点


Razor中也有非常有前途的功能,例如内联模板。考虑到Spark creator是由微软聘请的,我认为Razor有望写得很好,非常有用,并且支持良好的视图引擎。当然,我不会用Razor重写数百个Spark视图(尽管我用Spark重写了几十个WebForms视图)。但我肯定会认真看看Razor——我只是从你们的问题中发现了这一点,谢谢——我现在看到的看起来很有希望。当然,它不会与WebForms竞争(任何视图引擎都比WebForms好),但如果您还没有在另一个视图引擎上投入过多资金,它看起来是新ASP.NET MVC项目的一个不错的选择。

除了更干净的外观外,布局部分的灵活性看起来非常好,声明性HTML助手看起来非常有用。到目前为止,还没有看到使用它的任何负面影响,但当然必须在实践中尝试一下

单元可测试:新视图引擎 实施将支持 单元测试视图的能力(无需 需要控制器或web服务器, 并且可以在任何单元测试中托管 项目-无特殊应用程序域 必需)


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

Razor使用括号,也就是说,用于
foreach
之类的东西。 Spark在这里使用XML标记

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


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

对我来说,有三个令人信服的原因:

  • 编译-Razor视图可以编译成DLL。最后,我们在.NETWeb项目中获得了适当的可重用性。我可以有一个业务对象,它知道如何显示自己,而不必让代码作为.ascx文件在web项目的某些部分中浮动

  • 可测试性-当它被编译成一个类时,我可以编写一个单元测试,并向它抛出对象的模拟实例,以查看HTML是否正确

  • 智能感知简洁的语法很好,但不是最重要的部分


  • 你考虑过使用Spark吗?有关Spark提供的其他功能的列表,请参见queen3的答案。不幸的是,Spark Intellisense支持没有那么好(特别是在VS2010中),这可能会阻碍许多开发人员的展示。但是支持正在开发中,所以希望事情会有所改善。我觉得如果你需要Intellisense,那么你就太复杂了。当然,我的视图90%的内容看起来像
    !{Html.EditTemplateFor(x=>x.Quantity)}
    所以我只需要知道一些关键的辅助方法和视图模型的属性。我认为缺乏理智实际上帮助我使事情变得简单。我想是的。但是,老兄,Razor不能很快赶到这里。你的要点中有关于“汇编”的更多信息吗?也许是联系?提前谢谢。是的,在ScottGu关于Razor的博客文章的评论中提到,计划支持类库:引用:“re:介绍”Razor”–新的ASP.NET视图引擎2010年7月3日星期六下午12:14(ScottGu@Chris,>1)这些可以作为资源预编译或嵌入程序集吗?是的-这是我在帖子中没有提到的我们希望实现的事情之一。我们计划使您能够将它们添加到类库项目中,并将它们编译到assembly I中“啊,难怪我没有看到……他的帖子上总是有数百万条评论。”在此感谢您:有几篇关于在ASP.NET项目之外创建Razor视图的好博客文章:rc1中还没有预编译,不过您可以自己创建一些内容。我刚刚在博客上写过:re:‘自动生成变量’——你可以用约翰·斯基特的c