繁体   English   中英

如何通过 Razor 页面扩展 ASP.NET 核心 MVC 项目?

[英]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 项目和单个布局中同时使用它们吗?

如果您想在回答之前尝试一下,请使用以下步骤:

  1. 在 Visual Studio 2019 中创建新项目/解决方案
  2. Select“ASP.NET Core Web Application”作为项目模板
  3. 单击“创建”和 select“Web 应用程序(模型-视图-控制器)”作为默认设置的模板
  4. 在 Startup.cs 中添加 Razor 支持
  5. 尝试在这个项目中制作一个简单的 razor 页面

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM