Использовать динамический просмотр контента (через частичные просмотры).
При таком решении страница Test
будет динамически загружать другое представление в зависимости от маршрута, который использовался для его вызова.
Это означает, что у вас есть только одна Test
страница, но внутри файла cshtml
вы получите контент с частичного просмотра (подробнее об этом через секунду).
Сначала вам нужно будет переименовать файлы следующим образом ...
/Pages
Test.cshtml.cs
/Tenant1
_Test.cshtml // note it is prefixed with an underscore!
/Tenant2
_Test.cshtml // prefixed with an underscore too.
Соглашение об именах для частичного представления заключается в добавлении префикса к файлу с подчеркиванием (_
). Это немедленно идентифицирует того, кто смотрит на файлы вашего проекта как «не маршрутизируемую» страницу.
Затем вы добавляете немного логики для рендеринга частичных представлений ...
Test.cshtml
@{
switch(...) // used a switch statement to illustrate the solution
{
case "Tenant1":
await Html.PartialAsync("~/Pages/Tenant1/_Test.cshtml");
break;
case "Tenant2":
await Html.PartialAsync("~/Pages/Tenant2/_Test.cshtml");
break;
default:
throw new NotImplementedException();
}
}
О частичных видах можно прочитать здесь .
Дополнительно: использование той же модели страницы.
Я также заметил, что вы хотели использовать одну и ту же модель страницы (что означает разделение Test.cshtml.cs
для обоих. Это довольно тривиально, но для полноты ответа вот как вы это сделаете ...
/ Страницы / Test.cshtml.cs
namespace Foo.Pages
{
public class MySharedTestModel : PageModel
{
...
}
}
/ Pages / Tenant1 / Test.cshtml и / Pages / Tenant2 / Test.cshtml
@page
@using Foo.Pages
@model MySharedTestModel
...