我想使用Razor Pages创建一个ASP.NET Core 2.2项目.
我的目标是创建一个包含两类Razor Page的项目:
>标准类别:此类别包含将在多个项目*享的所有Razor页面
>自定义类别:此类别包含相对于项目的所有Razor页面.
到这里都可以,我在“页面”目录内创建两个子文件夹:标准文件夹,自定义文件夹.
我在每个项目中用我需要的所有剃须刀页面填充标准和自定义文件夹,其中所有剃须刀
Standard folderz中包含的页面在我的所有项目中都相同.
例如
项目A:
> /页
> /标准
> / SectionA
>页面A
> PageB
> /自定义
> / SectionE
> PageD
项目B:
> /页
> /标准
> / SectionA
>页面A
> PageB
> /自定义
> / SectionP
>页码
项目C:
> /页
> /标准
> / SectionA
>页面A
> PageB
> /自定义
> / SectionV
> PageJ
这就是我的问题:我将在每个项目中实施扩展标准的可能性
剃刀页面,也许是重写某些端点(例如,我想更改“ onGet”的行为
方法)或创建一个新方法(例如“ onGetMyCustomGet”).
我知道最简单的解决方案是更改标准剃刀页面中的代码,但是我想要
为避免这种情况,因为标准页面可以替换为新版本.因此,标准页面必须是
与项目无关并可以扩展.
我的想法是在“ / Custom”类别内创建一个“假”剃刀页面,以扩展标准剃刀
PageModel并覆盖我需要重新实现的所有方法.
问题是:如何退回标准
剃刀页面cshtml而不是fakeRazorPage cshtml?可能吗?
在这里,您将找到一个示例项目https://github.com/Blackleones/RazorPageResearch,如果您想进行协作,可以随时发送请求请求.
如果没有解决方案,则接受其他想法
解决方法:
您不必复制&将标准页的源代码粘贴到各处.只需创建一个单独的Razor类库项目并在Project A / Project B / Project 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