我在.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);
}
我唯一剩下的问题是我不能让某个客户的某个页面使用不同的布局。
这是我能做的事情
但我不能做的是替换客户X的一个视图文件并让它使用_LayoutX。我仍然希望customerx的所有其他文件使用普通的_Layout
因为如果我为customerX创建一个_Layout,那么所有customerX的页面都将使用它,而不是我想要的。 如果我为customerX创建一个名为_LayoutX的文件,那么我就不能将它应用于某个视图文件。因为即使我为customerX创建了视图文件,它也会忽略我放入实际视图文件中的任何@Layout,因为它将使用从自定义控制器获得的内容。
我想我能做的就是让myView(全局)使用_LayoutX(从控制器发送)。然后我可以全局放一个_LayoutX,它是_Layout的克隆,但在customerX下我可以把_LayoutX实际上是我想要的唯一文件。 不是一个漂亮的解决方案,因为我甚至在全球范围内将获得两倍的布局文件来跟踪。
有更好的想法吗?