C# 如何通过Razor页面扩展ASP.NET核心MVC项目?
我目前正试图通过Razor页面扩展现有的ASP.NET核心MVC项目(因为一些教程视频声称MVC、API、Razor和Blazor可以共存于同一个项目中,但没有一个视频显示它是如何实现的) 我已经发现我需要将Startup.cs扩展到C# 如何通过Razor页面扩展ASP.NET核心MVC项目?,c#,asp.net,asp.net-core,razor,asp.net-core-mvc,C#,Asp.net,Asp.net Core,Razor,Asp.net Core Mvc,我目前正试图通过Razor页面扩展现有的ASP.NET核心MVC项目(因为一些教程视频声称MVC、API、Razor和Blazor可以共存于同一个项目中,但没有一个视频显示它是如何实现的) 我已经发现我需要将Startup.cs扩展到 services.AddRazorPages(); 及 我试着简单地在视图文件夹中添加一个razor页面“Test”,扩展\u Layout.cshtml <li class="nav-item"> <a class
services.AddRazorPages();
及
我试着简单地在视图
文件夹中添加一个razor页面“Test”,扩展\u Layout.cshtml
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Test">Test</a>
</li>
public IActionResult Test()
{
return View();
}
但是,这会导致断点未命中,或者ViewData
字典为null
(在纯Razor页面项目中使用相同的代码),这可能是因为它试图将Razor页面视为MVC视图或其他内容
我还尝试添加了一些类似的内容
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Home/Test">Test</a>
</li>
单击导航栏项目时
我可以在单独的VS项目中完美地使用这两种功能,但是有没有一种方法可以在单个VS项目和单个布局中同时使用这两种功能
如果您想在回答之前试用,请使用以下步骤:
我找到了一个目前似乎有效的解决方案:在Startup.cs中,将razor pages配置为查看/Views文件夹,而不是默认的/pages(这显然打破了惯例): 使用此选项,我可以在不调整控制器的情况下使用
asp页面
样式的导航项
如果你能告诉我如何在不违反默认约定的情况下做到这一点,我仍然会接受任何人的回答(我的主要问题是我不知道如何使用
页面
文件夹、视图
文件夹和\u Layout.cshtml
仅在其中一个文件夹中。)剃须刀页面不需要控制器
默认目录是/Pages
,那么默认情况下,所有页面都应该位于Pages
目录中。如果要更改,可以在启动时覆盖ConfigureServices
中的配置
services.AddRazorPages(c=>c.RootDirectory = "/PagesRootDir");
要创建指向页面的链接,应使用asp页面
标记。例如,如果页面名称为Test
,则物理路径(默认情况下)将为Pages\Test
。要生成链接,您需要使用:
<a asp-page="/Test">Test Page</a>
如果要在所有页面上使用“视图\共享\\u布局”,则需要使用以下代码创建一个\u ViewStart
:
@{
Layout = "_Layout";
}
页面不应该在pages文件夹中吗?谢谢,这正是我要找的。它允许缓慢地转换到Razor页面,而不需要注意前端的任何内容。
services.AddRazorPages(c=>c.RootDirectory = "/PagesRootDir");
<a asp-page="/Test">Test Page</a>
@page
@model WebApplication1.Pages.TestModel
@{
Layout = "_Layout";
}
<h1>
Test Page
</h1>
Layout = null;
@{
Layout = "_Layout";
}