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

时间:2013-04-04 20:01:01

标签: .net asp.net-mvc master-pages multi-tenant asp.net-mvc-controller

我在.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);
        }

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

这是我能做的事情

  • 为不同的网页设置不同的布局
  • 为租户提供不同版本的布局
  • 没有主视图(通过发送IGNORE)

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

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

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

有更好的想法吗?

0 个答案:

没有答案