K.A*_*moa 7 asp.net-mvc razor .net-core razor-pages
我正在尝试设置 Razor Pages 路由以允许为不同的租户呈现不同的视图。
我有一个目录结构如下:
/Pages
Test.cshtml.cs
/Tenant1
Test.cshtml
/Tenant2
Test.cshtml
Run Code Online (Sandbox Code Playgroud)
鉴于我已经能够决定需要哪个租户,如何配置路由以将某些路径映射localhost:8080/Test到例如视图Tenant1/Test或Tenant2/Test视图。
使用此解决方案,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.
Run Code Online (Sandbox Code Playgroud)
分部视图的命名约定是在文件前添加下划线 (
_)。这将立即被查看您的项目文件的人识别为“不可路由”页面。
然后添加一点逻辑来渲染部分视图......
测试.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();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关部分视图的信息。
额外:使用相同的页面模型。
我还注意到您想要使用相同的页面模型(意味着Test.cshtml.cs两者共享。这是相当微不足道的,但为了答案的完整性,这里是您将如何做到这一点......
/Pages/Test.cshtml.cs
namespace Foo.Pages
{
public class MySharedTestModel : PageModel
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
/Pages/Tenant1/Test.cshtml和/Pages/Tenant2/Test.cshtml
@page
@using Foo.Pages
@model MySharedTestModel
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |