首页 > 解决方案 > 如何扩展 Razor 页面

问题描述

我想使用 Razor Pages 创建一个 ASP.NET Core 2.2 项目。

我的目标是创建一个包含两类 Razor 页面的项目:

到目前为止一切正常,我在“页面”目录中创建了两个子文件夹:标准文件夹,自定义文件夹。我在每个项目中使用我需要的所有剃须刀页面填充标准和自定义文件夹,其中包含在 Standard folderz 中的所有剃须刀页面在我的所有项目中都是相同的。

例如

项目一:

项目B:

项目 C:

这就是我的问题:我会在每个项目中实现扩展标准剃须刀页面的可能性,也许重写一些端点(例如我想更改“onGet”方法的行为)或创建一个新端点(如“ onGetMyCustomGet”)。

我知道最简单的解决方案是更改标准剃须刀页面中的代码,但我想避免这种情况,因为可以用新版本替换标准页面。因此,标准页面必须独立于项目并且可以扩展。

我的想法是创建一个“假” Razor 页面,在“/Custom”类别中扩展标准 razor PageModel 并覆盖我需要重新实现的所有方法。

问题是:如何返回标准剃须刀页面 cshtml 而不是 fakeRazorPage cshtml?可能吗?

在这里,您将找到一个示例项目https://github.com/Blackleones/RazorPageResearch如果您想合作,请随时发送拉取请求。

如果没有解决方案,接受其他想法

标签: c#razorasp.net-core

解决方案


您不必到处复制和粘贴标准页面的源代码。只需创建一个单独的 Razor 类库项目并在您的项目 A/项目 B/项目 C 中引用它,然后您就可以根据需要自定义任何内容。

假设您创建了一个新项目RazorResearch.Core作为“标准”页面:

<Project Sdk="Microsoft.NET.Sdk.Razor">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.2" />
  </ItemGroup>
</Project>

下面是RazorResearch.Core项目的目录结构:

└───Pages/
    └───SectionA/
        └───PageA.cshtml
        └───PageA.cshtml.cs
        └───PageB.cshtml
        └───PageB.cshtml.cs
└───RazorResearch.Core.csproj

现在参考这个 RazorLib :

dotnet add reference <path-to-the-RazorResearch.Core.csproj>

现在您可以根据需要自定义任何页面。例如,要自定义标准SectionA/PageA.cshtml,只需创建一个新Pages/SectionA/PageA.cshtml文件。

└───Pages/
    └───SectionA/
        └───PageA.cshtml
        └───PageA.cshtml.cs
    └───SectionE/
        └───PageD.cshtml
        └───PageD.cshtml.cs
    └───Shared/
    └─── ...
└───WebApplication3.csproj

推荐阅读