Как расширить бритвенные страницы - PullRequest
0 голосов
/ 19 февраля 2019

Я хотел бы создать проект ASP.NET Core 2.2 с использованием Razor Pages.

Моя цель - создать проект, содержащий две категории Razor Page:

  • Standardкатегория: эта категория содержит все страницы бритвы, которые будут использоваться несколькими проектами
  • Пользовательская категория: эта категория содержит все страницы бритвы, относящиеся к проекту.

Довсе хорошо, я создаю две подпапки внутри каталога "Страницы": Стандартная папка, Пользовательская папка.Я заполняю стандартные и пользовательские папки всеми страницами бритвы, которые мне нужны в каждом проекте, где все страницы бритвы, содержащиеся в стандартной папкеz, одинаковы во всем моем проекте.

Например

Проект A:

  • / Страницы
    • / Стандарт
      • / Раздел A
        • Страница A
        • Страница B
    • / Custom
      • / SectionE
        • PageD

Проект B:

  • / Страницы
    • / Стандарт
      • / Раздел A
        • Страница A
        • СтраницаB
    • / Custom
      • / SectionP
        • PageK

Проект C:

  • / Pages
    • / Стандарт
      • / SectionA
        • PageA
        • PageB
    • / Custom
      • / SectionV
        • PageJ

Здесь возникла моя проблема: я бы реализовал в каждом проекте возможность расширить стандартную страницу бритвы, возможно, переписать некоторую конечную точку (например, я хочу изменить поведение метода "onGet") или создатьновый (например, «onGetMyCustomGet»).

Я знаю, что самое простое решение - это изменить код внутри стандартной страницы бритвы, но я хочу избежать этого, потому что стандартные страницы можно заменить новыми версиями.Таким образом, стандартные страницы должны быть независимыми от проекта и открытыми для расширения.

Моя идея состоит в том, чтобы создать "поддельную" страницу Razor внутри категории "/ Custom", которая расширяет стандартную бритву PageModel и переопределяет все методы, которые мне нужно переопределить.

Проблема: как я могу вернуть стандартную страницу бритвы cshtml вместо fakeRazorPage cshtml?Возможно ли это?

Здесь вы найдете пример проекта https://github.com/Blackleones/RazorPageResearch Если вы хотите сотрудничать, не стесняйтесь отправлять запрос на извлечение ответа.

Если не существует решений, принимаются другие идеи.1119 *

1 Ответ

0 голосов
/ 20 февраля 2019

Вам не нужно копировать и вставлять исходный код стандартных страниц везде.Просто создайте отдельный проект библиотеки классов Razor и сделайте ссылку на него в своем проекте 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
...