尽管 Chris 对标准 ASP.NET Core 实现所附带的框架提供了明确的意见。人们还必须注意,MS 推荐 Razor Pages 有更深层次的原因,因为我是 Razor Pages 的忠实粉丝,所以我对此很清楚。
如果除了页面的简单性之外还有什么比控制器/视图更喜欢 Razor 页面 - 特别是我对这两个框架的性能感兴趣?
- 要回答这个问题,如果您问这个问题,您听起来好像您根本没有在 MVC 中完成过真正繁重的应用程序。考虑到并非所有程序员都遵循良好的编程实践(评论和适当的代码管理),控制器变得蜂拥而至,它可能真的很混乱......所以想象一个控制器有几个 Page 方法和逻辑都放在里面. 好吧,结果是你很容易最终得到一个包含超过 400 多行代码的控制器,这些代码很容易被拆分,因为它引用了应用程序的不同部分(页面或方法)。那么如何打破这 300 多行代码并根据它们的作用将它们分开呢?这是剃刀页面背后的全部想法。您只需将与特定页面相关的代码放到它自己的模型中,而不是将与 10 个页面相关的代码混合在一个文件中。出色地,其他人可能会争辩说您可以创建外部类,您可以在其中放置此逻辑以保持控制器清洁,但为什么要加倍努力呢?其次,性能根本不应该成为问题。我认为这在这一点上并不重要。Razor Pages 在基于表单的页面方面蓬勃发展,因为模型绑定非常流畅。
是否可以同时组合 Razor 页面和控制器/视图?
- 嗯,当谈到 .NET 时,MVC 是 WebAPI 的巅峰之作。因此,两者可以在任何时候、任何时间混合。Razor 页面确实类似于“真实页面”,但它们可以灵活地适应任何内容,无论是目录还是您希望构建的任何内容。每个页面都可以提供它自己的请求 GET、POST 等……因此,您可以使用剃须刀页面做任何您想做的事情。还必须清楚的是,Razor Pages 的路由并不复杂。它的工作方式与 MVC 中一样灵活......
我使用 Razor Pages 已经有一段时间了,注意到尽管 Razor Pages 具有简单性的优点,但在自定义路由、结构化文件夹和复杂的视图模型(页面模型似乎杂乱无章)方面有点复杂。
- 我宁愿不同意这一点。Razor 页面的路由很灵活,您只是没有自己解决它。剃刀页面也可以构建一个非常复杂的视图,因为您可以将尽可能多的视图模型绑定到它而无需任何额外的努力。使用注释规则
[BindProperties]
or [BindProperty]
,您可以将任意数量的字段导入到视图中......并记住绑定是双向的。
除非你开始使用 Razor 页面,否则你会听到很多关于它的意见,有些人会让你放弃使用它,有些人像 Chris 会给你真实的反馈。但我的建议是,Razor 页面已经发展并在任何大小的任何应用程序中表现最佳......
我希望你觉得这很有趣。
.Net 核心家族