我正在尝试设置Razor页面路由,以允许为不同的租户呈现不同的视图。
我的目录结构如下:
/Pages
Test.cshtml.cs
/Tenant1
Test.cshtml
/Tenant2
Test.cshtml
鉴于我已经能够决定需要哪个租户,如何配置路由以将某些路径(例如localhost:8080/Test
映射到Tenant1/Test
或Tenant2/Test
视图。
答案 0 :(得分:1)
使用此解决方案,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();
}
}
您可以阅读有关部分视图here的信息。
其他:使用相同的页面模型。
我还注意到,您曾经想使用相同的页面模型(这意味着两者都共享Test.cshtml.cs
。这相当简单,但是为了完整起见,这里是您将如何做的... >
/Pages/Test.cshtml.cs
namespace Foo.Pages
{
public class MySharedTestModel : PageModel
{
...
}
}
/Pages/Tenant1/Test.cshtml 和 /Pages/Tenant2/Test.cshtml
@page
@using Foo.Pages
@model MySharedTestModel
...