Asp.net mvc Asp.net core 2中的视图和页面有什么区别?

Asp.net mvc Asp.net core 2中的视图和页面有什么区别?,asp.net-mvc,razor,asp.net-core,asp.net-core-2.0,Asp.net Mvc,Razor,Asp.net Core,Asp.net Core 2.0,我是Asp.NETCore2的新手。Asp.net core 2中的新功能之一是页面。 但我想不出来 页面和视图之间的区别是什么 与视图相比,页面有哪些好处 在什么情况下应该使用该页面 我能同时使用这两种吗 真的,你的问题是Razor页面和传统MVC有什么区别。两者都使用剃须刀视图。剃须刀页面是独立的(有点)。它有一个类似Web表单的代码隐藏,因此从技术上讲,您将拥有一个cshtml和一个cshtml.cs文件,后者将充当控制器和模型。然而,使用传统的MVC,您将拥有独立的FooControll

我是Asp.NETCore2的新手。Asp.net core 2中的新功能之一是页面。 但我想不出来

  • 页面和视图之间的区别是什么
  • 与视图相比,页面有哪些好处
  • 在什么情况下应该使用该页面
  • 我能同时使用这两种吗

  • 真的,你的问题是Razor页面和传统MVC有什么区别。两者都使用剃须刀视图。剃须刀页面是独立的(有点)。它有一个类似Web表单的代码隐藏,因此从技术上讲,您将拥有一个
    cshtml
    和一个
    cshtml.cs
    文件,后者将充当控制器和模型。然而,使用传统的MVC,您将拥有独立的
    FooController
    FooViewModel
    Foo.cshtml
    。除了一些细微的功能差异(例如必须使用基于约定的“操作”,如剃须刀页面上的
    OnGetAsync
    OnPostAsync
    ,等等)之外,这差不多就是它

    在我看来,Razor Pages的主要好处是它的自包含性。关于特定功能的所有代码基本上都在一个地方。然而,这样做的缺点是,它会使代码重用变得困难,或者至少在某些地方没有那么直观。就我个人而言,我认为MVC提供的清晰的职责划分是更理想的方法,也不太“神奇”。Razor Pages的一个营销接触点是它非常简单。这可能是真的,但它的“易用性”归功于抽象出web开发人员实际上应该意识到的东西,而这可能是危险的。如果你不真正理解事情是如何运作的,你就不知道你做的事情是否正确

    我有偏见,但诚实地回答“什么时候应该使用剃须刀页面?”我会说永远不会。我不喜欢职责的混合,所有的“魔力”,等等。自从他们被引入ASP.NET以来,这里的ASP.NET核心问题数量激增,大多数剃须刀页面的问题都是关于MVC显而易见或至少更直观的事情。也就是说,如果你打算使用它们,它们在CRUD类型的东西上最有意义——这些东西没有太多功能,而且相当直接和/或重复


    最后,是的,您可以自由地混合和匹配Razor页面和MVC。然而,应该注意的是,这并不是每个人都能看到的:当用作剃须刀页面时,剃须刀页面只起到剃须刀页面的作用。换句话说,如果您创建了一个带有代码隐藏(Razor页面)的视图,然后将该视图用作MVC操作、部分等的返回,那么实际上并没有使用代码隐藏,只使用了“视图”部分。实际上,更准确地说,它是“使用”的,但仅在一般意义上为视图提供模型,因为视图使用代码隐藏中的
    页面作为其模型。然而,这实际上不会是“活动的”,因为页面操作不会被点击,事情可能不会正确初始化,等等。

    可能重复@DavidG,我想在这个链接中,我刚刚写到了页面的好处,但这是同一个问题。提供更多信息并添加指向所有最佳MVC与RP内容的链接。非常感谢,您的答案对初学者来说是一个很好的指南。请告诉我你是否还知道其他事情。你的建议是使用这些页面更好吗?不,相反。我认为Razor页面是Web表单的重生以及随之而来的所有邪恶。尽管如此,从代码的角度来看,它们并没有Web表单那么糟糕,节省使用也不算太糟糕。然而,我认为MVC总体上提供了更好的解决方案,并带来了更好、更易于维护的代码库。@ChrisPratt“web表单的重生”——这正是我第一次看到它时的想法lol@ChrisPratt你的评论是典型的有偏见的开发人员,他们从来没有做过任何非平凡的RP编程。所有的邪恶都是错误的。请参阅提供了更多信息,并添加了指向所有最佳MVC与RP内容的链接。