我目前正在尝试通过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();
});
我试图简单地增加一个剃须刀页“测试”的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 Page视为MVC视图或其他东西。
我也尝试添加类似
<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项目和单个布局中同时使用它们吗?
如果您想在回答之前尝试一下,请使用以下步骤:
剃须刀页面不需要控制器。
默认目录为/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";
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句