加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 多租户Razor页面

发布时间:2020-12-16 09:44:05 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试设置Razor Pages路由,以允许为不同的租户呈现不同的视图. 我有一个目录结构如下: /Pages Test.cshtml.cs /Tenant1 Test.cshtml /Tenant2 Test.cshtml 鉴于我已经能够确定需要哪个租户,如何配置路由以将一些路径(例如localhost:8080 / Test)映射
我正在尝试设置Razor Pages路由,以允许为不同的租户呈现不同的视图.

我有一个目录结构如下:

/Pages
    Test.cshtml.cs
    /Tenant1
        Test.cshtml
    /Tenant2
        Test.cshtml

鉴于我已经能够确定需要哪个租户,如何配置路由以将一些路径(例如localhost:8080 / Test)映射到Tenant1 / Test或Tenant2 / Test视图.

解决方法

使用动态视图内容(通过部分视图).

使用此解决方案,“测试”页面将根据用于调用它的路由动态加载不同的视图.

这意味着您只有一个测试页面,但在cshtml文件中,您将从局部视图中获取内容(更多内容在一秒内).

首先,你需要重命名这些文件….

/Pages
    Test.cshtml.cs
    /Tenant1
        _Test.cshtml  // note it is prefixed with an underscore!
    /Tenant2
        _Test.cshtml  // prefixed with an underscore too.

The naming convention for a partial view is to prefix the file with an underscore (_). This will immediately identify to someone looking at your project files as a “non-routable” page.

然后你添加一些逻辑来渲染局部视图……

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 

...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读