![](/img/trans.png)
[英]How to integrate Razor Components into existing Razor Pages Asp.net Core project with multiple routes
[英]How to extend an ASP.NET Core MVC project by Razor Pages?
I'm currently trying to extend an existing ASP.NET Core MVC project by a Razor page (since several tutorial videos claim that MVC, API, Razor and Blazor can coexist in the same project - but none of them shows how it's done).
我已经发现我需要扩展 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 页面项目中工作的相同代码),可能是因为它尝试将 ZE405C1DF83BD248A07FC9A912279AED 视为页面。
我也尝试过添加类似的东西
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Home/Test">Test</a>
</li>
改为布局,但这会产生 URL 之类的
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";
}
我找到了一个目前似乎可行的解决方案:在 Startup.cs 中,配置 razor 页面以查看 /Views 文件夹而不是默认的 /Pages (这显然违反了约定):
services.AddRazorPages(configure => configure.RootDirectory = "/Views");
使用它,我可以使用asp-page
样式的导航项,而无需调整 controller。
如果您可以向我展示如何在不违反默认约定的情况下执行此操作,我仍然会接受任何人的回答(我的主要问题是我不知道如何使用Pages
文件夹、 Views
文件夹和_Layout.cshtml
仅在一个其中。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.