我正在使用带有Razor页面的新asp.net核心2.0构建一个网站。我无法插入html块以供重用(例如菜单)。我在这里问过,我得到的答案是使用@ {Html.RenderPartial
然后,当我使用它时,我仍然有错误。为了解决这个错误,我不得不从我要插入页面的.cshtml文件中删除@page。我在这里得到答案的原因是因为 @ {Html.RenderPartial 是MVC的一部分,因此它是局部视图,不能使用页面顶部的@page。
但是,这是我的困惑:在Microsoft的文档中,他们非常清楚地说现在使用新的asp.net核心2.0,你应该在你创建的每个页面(.cshtml文件)中放置@page。
所以,现在问题是:在新的asp.net核心2.0中插入html块以便重用的正确方法是什么,如果有正确的方法?
因为你似乎要么使用MVC,要删除@page。但微软说你必须把@page。 所以我很困惑。
这是他们写的: “。@page必须是页面上的第一个Razor指令。”
从此页面:https://docs.microsoft.com/en-us/aspnet/core/mvc/razor-pages/index?tabs=visual-studio
此外,新的ASP.NET核心2.0是MVVM。那么为什么我必须使用MVC才能重用html块?
由于
答案 0 :(得分:2)
Razor Pages建立在MVC框架之上,并重用了许多MVC原语。因此,许多在MVC中起作用的东西也可以在Razor Pages中起作用(但不是全部)。
剃刀页面是一个端点。因此,它需要@page
指令。部分不是端点。这是一个可重用的组件。这就是为什么它不应该包含@page
指令的原因。
自从您提出问题以来,已经发布了包含Partial taghelper的ASP.NET Core 2.1。现在,建议使用此方法在Razor Pages(以及ASP.NET MVC Core)中包含部分内容。
Razor Pages不是MVVM。它实际上是页面控制器模式的实现。可能引起混淆的地方是PageModel。这是MVC控制器和视图模型的混合体,它包含操作方法(可以返回IActionResult
),并且其公共属性作为模型的属性公开给Razor Content页面。