c# - 如何通过 Razor Pages 扩展 ASP.NET Core MVC 项目?

标签 c# asp.net asp.net-core razor asp.net-core-mvc

我目前正在尝试通过 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();
});
我尝试简单地将 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 Page 项目中使用相同的代码),可能是因为它尝试将 Razor 页面视为 MVC View 或其他东西。
我也试过添加类似的东西
<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 项目和单个布局中同时使用它们吗?
如果您想在回答之前尝试一下,请使用以下步骤:
  • 在 Visual Studio 2019 中创建新项目/解决方案
  • 选择“ASP.NET Core Web Application”作为项目模板
  • 点击“Create”并选择“Web Application (Model-View-Controller)”作为模板,默认设置
  • 在 Startup.cs 中添加 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";
    }
    
    enter image description here

    关于c# - 如何通过 Razor Pages 扩展 ASP.NET Core MVC 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62863196/

    相关文章:

    c# - 从基础 asp.net 身份用户创建继承用户

    c# - 自定义 MVC 路由 : changing where the views for a controller are located

    asp.net - 使用 Website Payments Standard 在 asp.net 网站中集成 Paypal Sandbox

    c# - 在 Visual Studio 2017 的 IServiceCollection 中找不到 AddMvc()

    c# - 从代码设置桌面背景颜色

    c# - 在父方法中访问子对象的静态属性

    c# - 在 asp .net 中从动态创建的控件标签中检索值

    asp.net - 监视 SQL Azure 中的数据更改

    asp.net-core - ASP.NET 核心 blazor webassembly 获取用于 Identity Server 4 Postman 测试的 token

    .net - 如何发布面向框架 net461 的 .NET Core ASP.NET 网站?