【问题标题】:ASP.NET MVC Razor view engineASP.NET MVC Razor 视图引擎
【发布时间】:2011-03-11 15:03:36
【问题描述】:

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

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

【问题讨论】:

  • 我想是的。但是,伙计,Razor 不能很快到达这里。

标签: asp.net-mvc razor viewengine


【解决方案1】:

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

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

【讨论】:

  • 你考虑过使用 Spark 吗?有关 Spark 提供的附加功能列表,请参阅 queen3 的回答。
  • 不幸的是,Spark Intellisense 支持不太好(尤其是在 VS2010 中),这对许多开发人员来说可能是一个阻碍。但是支持正在开发中,所以希望事情会有所改善。
  • 我觉得如果您需要 Intellisense 以使某些事情变得过于复杂。当然,我的视图 90% 的内容看起来像 !{Html.EditTemplateFor(x => x.Quantity)},所以我只需要知道一些关键的辅助方法和视图模型上的属性。我认为缺乏智能感知实际上帮助我保持简单。
【解决方案2】:

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

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

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

  3. IntelliSenseTerse Syntax 很好,但不是最重要的部分。

【讨论】:

  • 您是否有更多关于要点中“编译”的信息?一个链接,也许?提前谢谢。
  • 是的,在 ScottGu 关于 Razor 的博客文章的 cmets 中提到计划支持类库:weblogs.asp.net/scottgu/archive/2010/07/02/… 引用:“re: 引入“Razor”——一种新的 ASP 视图引擎。 NET 2010 年 7 月 3 日星期六 12:14 PM 作者:ScottGu @Chris,> 1) 这些可以作为资源预编译或嵌入到程序集中吗?是的 - 这是我们希望实现但我没有实现的事情之一在帖子中提到。我们计划让您将这些添加到类库项目中并将它们编译成程序集。...ScottGu"
  • 啊,难怪我没看到……他的帖子上总是有数百万的cmets。 :) 谢谢
  • 对此的更新:一些关于在 ASP.NET 项目之外创建 Razor 视图的优秀博客文章:blog.andrewnurse.net/2010/07/22/…
  • rc1 中还没有预编译功能,但可以自己创建一些东西。我刚刚写了一篇博客:goo.gl/KffWq
【解决方案3】:

Razor 使用括号,即foreach 的东西。 Spark 在这里使用 XML 标签。

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

也许这不是什么大事,但显示出一致性和可扩展性。

【讨论】:

    【解决方案4】:

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

    • 使用相同的标记语言而不是 C#(宏)编写 html 扩展 - 我看到 Razor 也支持这一点,我希望它支持方法/参数覆盖;
    • 自定义标签(写_Tag.spark使用);
    • 自动生成的变量,例如 varIsFirst、varIndex 等;
    • 特殊的表达式形式(?{} 用于条件属性,$!{} 用于跳过错误等);
    • 不错的主/部分布局支持,包括部分指定标记的一部分应仅在主中呈现一次的能力(例如脚本包含);
    • 您仍然可以使用 WebForms 标记 - 非常适合兼容性和增量升级;
    • 支持在彼此内部同时使用 "" 和 '' 引号(非常有用)。

    我更喜欢循环/ifs 的 Spark 语法 - 混合 HTML 和 C# {} 大括号看起来不太好 - 但这纯粹是个人意见。

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

    【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-13
        • 2010-11-29
        • 1970-01-01
        • 2011-07-12
        相关资源
        最近更新 更多