Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在多租户解决方案中动态设置母版页。_.net_Asp.net Mvc_Master Pages_Multi Tenant_Asp.net Mvc Controller - Fatal编程技术网

.net 在多租户解决方案中动态设置母版页。

.net 在多租户解决方案中动态设置母版页。,.net,asp.net-mvc,master-pages,multi-tenant,asp.net-mvc-controller,.net,Asp.net Mvc,Master Pages,Multi Tenant,Asp.net Mvc Controller,我在.NETMVC4中创建了一个多租户解决方案,效果非常好。我只剩下最后一期了 我使用OnResultExecuting创建了自己的控制器,这很好,因为它允许我在处理母版页的同时仍然保持我的多租户功能(在自定义视图引擎中路由) 我的代码看起来是这样的 protected override void OnResultExecuting(ResultExecutingContext filterContext) { var viewResult = filterCon

我在.NETMVC4中创建了一个多租户解决方案,效果非常好。我只剩下最后一期了

我使用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);
        }
我唯一剩下的问题是,我不能让某个客户的某个页面使用不同的布局

这是我能做的

  • 不同的页面有不同的布局
  • 为租户提供不同版本的布局
  • 没有主视图(通过发送忽略)
但我不能做的是替换客户X的一个视图文件,让它使用_LayoutX。我仍然希望customerx的所有其他文件使用普通布局

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

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


有更好的主意吗?

不如在System.Web.MVC.ViewPage中添加您自己的自定义视图页面,并在其中处理所有这些内容。我没有尝试过这种情况。但是我想到了这个建议。嗯,你可能是对的。这可能是一个很好的解决方案。看看我是否有时间尽快测试它!当然,瑞克,一定要让我知道实施情况。我们将创建一个从
ViewPage
继承的自定义视图页面,并且在
OnPreInit
方法中,我们将基于租户覆盖主题。