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