c# - 如何扩展 Razor 页面
问题描述
我想使用 Razor Pages 创建一个 ASP.NET Core 2.2 项目。
我的目标是创建一个包含两类 Razor 页面的项目:
- 标准类别:此类别包含将跨多个项目共享的所有 Razor 页面
- 自定义类别:此类别包含与项目相关的所有 Razor 页面。
到目前为止一切正常,我在“页面”目录中创建了两个子文件夹:标准文件夹,自定义文件夹。我在每个项目中使用我需要的所有剃须刀页面填充标准和自定义文件夹,其中包含在 Standard folderz 中的所有剃须刀页面在我的所有项目中都是相同的。
例如
项目一:
- /页
- /标准
- /A部分
- 页面A
- 页面B
- /A部分
- /风俗
- /E节
- 第D页
- /E节
- /标准
项目B:
- /页
- /标准
- /A部分
- 页面A
- 页面B
- /A部分
- /风俗
- /P 节
- 页面K
- /P 节
- /标准
项目 C:
- /页
- /标准
- /A部分
- 页面A
- 页面B
- /A部分
- /风俗
- /第五节
- 页面J
- /第五节
- /标准
这就是我的问题:我会在每个项目中实现扩展标准剃须刀页面的可能性,也许重写一些端点(例如我想更改“onGet”方法的行为)或创建一个新端点(如“ onGetMyCustomGet”)。
我知道最简单的解决方案是更改标准剃须刀页面中的代码,但我想避免这种情况,因为可以用新版本替换标准页面。因此,标准页面必须独立于项目并且可以扩展。
我的想法是创建一个“假” Razor 页面,在“/Custom”类别中扩展标准 razor PageModel 并覆盖我需要重新实现的所有方法。
问题是:如何返回标准剃须刀页面 cshtml 而不是 fakeRazorPage cshtml?可能吗?
在这里,您将找到一个示例项目https://github.com/Blackleones/RazorPageResearch如果您想合作,请随时发送拉取请求。
如果没有解决方案,接受其他想法
解决方案
您不必到处复制和粘贴标准页面的源代码。只需创建一个单独的 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
推荐阅读
- javascript - 如何使用插入单元格和插入行在javascript中使用for循环在表格的每一行内插入单元格
- javascript - 角度内部 foreach 中断/继续意外行为
- python - 为什么我的海龟键绑定没有响应?
- tensorflow - 将自定义属性从 TF op 传递到 TFL (MLIR)
- flutter - Flutter analysis_options.yaml 缺失
- java - Spock -Unit Test:如何为采用 Mono 的 @around 注释编写 spock 单元测试
- javascript - Firebase Cloud Functions 不会在子集合中创建文档
- wpf - How to have alternative background color of the selected rows on WPF DataGrid via MultiDataTrigger
- url - 管理站点的“在站点上查看”URL 不正确
- c# - 为什么当涉及到比率问题1方法c#时什么都没有发生