ASP.NET Core Razor页面与完整MVC Core

ASP.NET Core Razor pages vs Full MVC Core

SO上存在一个问题,为什么Razor Pages是在Asp.net Core 2.0中创建Web UI的推荐方法? 史蒂夫·史密斯(Steve Smith)从减少文件数量的角度,亲切地解释了使用剃刀页面优于完整MVC的好处。

我使用Razor Pages已有一段时间,并注意到尽管Razor Page简单性有优势,但在自定义路由,结构化文件夹和复杂的视图模型(页面模型看起来很杂乱)方面还是有点复杂。

因此,问题是:

  • 如果除了页面的简单性之外,还有其他东西比"控制器/视图"更喜欢Razor页面-特别是我对这两个框架的性能感兴趣?
  • 可以同时合并"剃刀页面"和"控制器/视图"吗?
  • 如果某些经验丰富的人分享了您有关使用Razor Pages更好地理解此框架的想法(利弊),我也将不胜感激。


    我们最近启动了一个相当不错的应用程序,使用Razor Pages作为前端,使用MVC控制器作为客户端组件的API。我的经验是:

    当您的内容围绕站点上实际"页面"的概念进行组织时,页面范例将很好地工作。考虑一下诸如"联系我们"或"关于"甚至"登录"页面之类的问题。当然,可以通过MVC完成这些操作,但是MVC确实是不必要的。一个简单的页面就足够了。将控制器留给控制器更多的东西,例如产品目录或用户数据库。

    如果您的MVC架构主要围绕视图结构旋转,则剃刀页面可能是一个很好的选择。您仍然可以将MVC位用于与API相关的内容,但是页面的好处是,您的前端结构变得更显式和更少隐式("基于约定"),就像MVC一样,其中每个动作可以或不能拥有一个视图通常以动作命名。


    尽管Chris对于标准ASP.NET Core实现附带的框架提供了明确的意见。人们还必须注意,让MS推荐Razor Pages的原因更深,自从我很喜欢剃须刀纸页以来,他们就对我很清楚了。

    If there is anything else except simplicity of a page to prefer Razor
    Pages over Controllers/Views - specifically I'm interested in
    performance of the two frameworks?

    • 为了回答这个问题,如果您要问这个问题,您听起来好像没有在MVC中做过真正繁重的应用程序。考虑到并不是所有的程序员都遵循良好的编程习惯(注释和适当的代码管理),所以控制器变得无处不在,代码可能真的很杂乱。因此,想象一下一个控制器,其中包含一些带有逻辑的Page方法。好吧,结果是您很容易就可以得到一个包含超过400行代码的控制器,这些代码可以很容易地拆分,因为它涉及不同的部分(页面或方法)。那么,如何打破这300多个代码行并根据它们的作用将它们分开呢?这就是剃须刀页面背后的整个想法。您只需将与特定页面相关的代码放在自己的模型中,而不是将与10个页面相关的代码混合到一个文件中。好吧,其他人可能会争辩说,您可以创建外部类,并在其中放置此逻辑以保持控制器整洁,但为什么还要花大力气呢?其次,性能完全不是问题。我认为目前不重要。

    Is it acceptable to combine Razor Pages and Controllers/Views at the
    same time?

    • 好吧,当涉及到.NET时,MVC是WebAPI的巅峰之作。因此,可以随时随地将两者混在一起。剃刀页面确实类似于"真实页面",但是它们可以灵活地适应任何内容,无论是目录还是您希望构建的任何页面。每个页面都可以处理自己的请求GET,POST等...因此,您可以使用剃须刀页面做任何您想做的事情。还必须清楚的是Razor Pages的路由并不复杂。它的工作方式与MVC一样灵活...

    I've been using Razor Pages for a while and noticed that despite an
    advantage of a Razor Page simplicity, it is a bit complicated when it
    comes to custom routing, structuring folders and complex view model
    (page model seem to be cluttered).

    • 我宁可不同意这一点。 Razor页面的路由很灵活,您只是还没有解决这个问题。剃刀页面也可以构建非常复杂的视图,因为您可以将许多视图模型绑定到该视图模型而无需任何额外的工作。使用注释规则[BindProperties][BindProperty],您可以将所需的任意多个字段导入视图...并记住绑定是双向的。

    除非您开始使用Razor页面,否则您会听到很多关于它的意见,有些会让您无法使用它,有些人像Chris会给您真正的反馈。但是我的建议是,Razor页面已经发展并且在任何大小的应用程序中都表现最好...

    我希望您觉得这有趣有趣。

    .Net核心家族


    克里斯和莫西亚给出了很好的答案。克里斯写道

    You sound like you simply haven't done a really heavy app in MVC

    当我将ASP.NET Core MVC入门移植到ASP.NET Core中的Razor Pages入门时,我没有看到Razor Pages(RP)优于带有控制器和视图的MVC。直到我将ASP.NET MVC Web应用程序中的EF Core入门移植到ASP.NET Core中的带有Entity Framework Core的Razor Pages时,我看到了显着的生产力优势。 MVC / EF绝不接近真正的生产应用程序,它要简单得多。然而,它具有足够的复杂性,足以证明RP优于MVC。

    在接受客户采访时,我听到坚持使用UI的控制器和视图的最常见原因是他们拥有现有的控制器/视图代码库。

    与MVC相比,首选RP的最常见原因是可以防止控制器肿,以及页面和视图之间的更好集成。

    Razor Pages与ASP.NET Core MVC和
    为什么选择Razor Pages上的MVC教程提供了更多信息,并添加了指向所有最佳MVC VS的链接。 RP内容。