0

我在 .net mvc4 中创建了一个效果很好的多租户解决方案。我只剩下最后一期了。

我使用 OnResultExecuting 创建了自己的控制器,这很好,因为它允许我处理母版页,同时仍然保持我的多租户功能(在自定义视图引擎中路由)

我的代码看起来像这样

    protected override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var viewResult = filterContext.Result as ViewResult;
        if (viewResult != null)
        {
            viewResult.MasterName = viewResult.MasterName == "" ? "_Layout" : (viewResult.MasterName == "IGNORE" ? "" : viewResult.MasterName);
        }

我唯一剩下的问题是我不能为某个客户制作某个页面使用不同的布局。

这是我能做的

  • 不同的页面有不同的布局
  • 为租户提供不同版本的布局
  • 没有masterview(通过发送IGNORE)

但我不能做的是替换客户 X 的一个视图文件并让它使用 _LayoutX 代替。我仍然希望customerx的所有其他文件使用正常的_Layout

因为如果我为 customerX 创建一个 _Layout,那么所有 customerX 的页面都会使用它,而不是我想要的。如果我改为为 customerX 创建一个名为 _LayoutX 的文件,则无法将其应用于某个视图文件。因为即使我为 customerX 创建视图文件,它也会忽略我放入实际视图文件中的任何 @Layout,因为它将使用从自定义控制器获得的内容。

我想我能做的就是让 myView (全局)使用 _LayoutX (从控制器发送)。然后,我可以全局放置一个 _LayoutX,它是 _Layout 的克隆,但在 customerX 下我可以放置 _LayoutX,它实际上是我想要的唯一文件。这不是一个很好的解决方案,因为我什至在全球范围内都会获得两倍多的布局文件来跟踪。

有更好的想法吗?

4

0 回答 0