我目前正在尝试通过 Razor 页面扩展现有的 ASP.NET Core MVC 项目(因为几个教程视频声称 MVC、API、Razor 和 Blazor 可以在同一个项目中共存 - 但没有一个显示它是如何完成的)。
我已经发现我需要通过以下方式扩展 Startup.cs
services.AddRazorPages();
和app.UseEndpoints(endpoints =>
{
// This was here already
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
// I added this
endpoints.MapRazorPages();
});
我尝试简单地将 Razor 页面“测试”添加到 Views
文件夹,将 _Layout.cshtml
扩展为<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Test">Test</a>
</li>
然后通过扩展 HomeController
public IActionResult Test()
{
return View();
}
但是,这会导致几个问题,即未命中断点,或者 ViewData
字典是 null
(在纯 Razor Page 项目中使用相同的代码),可能是因为它尝试将 Razor 页面视为 MVC View 或其他东西。我也试过添加类似的东西
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Home/Test">Test</a>
</li>
改为布局,但这会产生一个像https://localhost:5001/?page=%2FHome%2FTest
单击导航栏项目时。我可以在单独的 VS 项目中完美地拥有这两个东西,但是没有办法在单个 VS 项目和单个布局中同时使用它们吗?
如果您想在回答之前尝试一下,请使用以下步骤:
最佳答案
Razor 页面不需要 Controller 。
默认目录是 /Pages
,那么默认情况下所有页面都应该在 Pages
目录中。如果你想改变它,你可以通过在启动时覆盖 ConfigureServices
中的配置来实现。
services.AddRazorPages(c=>c.RootDirectory = "/PagesRootDir");
要创建页面链接,您应该使用 asp-page
标记。例如,如果页面名称为 Test
,则物理路径(默认情况下)将为 Pages\Test
。要生成链接,您需要使用:<a asp-page="/Test">Test Page</a>
默认情况下,页面不会使用默认布局,您可以随时覆盖它。@page
@model WebApplication1.Pages.TestModel
@{
Layout = "_Layout";
}
<h1>
Test Page
</h1>
要删除布局:Layout = null;
如果要在所有页面上使用“Views\Shared\_Layout”,则需要使用以下代码创建 _ViewStart
:@{
Layout = "_Layout";
}
关于c# - 如何通过 Razor Pages 扩展 ASP.NET Core MVC 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62863196/