基于 URL 参数的多个视图文件夹
Posted
技术标签:
【中文标题】基于 URL 参数的多个视图文件夹【英文标题】:Multiple View Folders Based on URL parameter 【发布时间】:2018-11-14 05:24:31 【问题描述】:我为我们的一个客户开发了一个 MVC5 应用程序。它工作正常。现在我们有更多的客户端,所有的功能都是一样的,但是每个客户端的视图是不同的(不仅布局,而且每个视图的 html 结构本身都是不同的)。
我用来区分客户端的方法是提供不同的 url,添加一个客户端标识符(因为我们需要在登录之前识别客户端),并在 RouteConfig 中对其进行过滤,如下所示:
routes.MapRoute("ClientRoute", "client/controller/action/id",
new controller = "Home", action = "Index", id =
UrlParameter.Optional ,
new RouteValueDictionary
"client", "icici|federal|pnb|sbi"
);
icici、federal、pnb 和 sbi 是有效客户端。
我可以使用下面的代码来区分任何客户端特定逻辑的客户端。
var clientName = HttpContext.Current.Request.RequestContext.RouteData.Values["client"].ToString();
我想要的是为每个客户提供单独的视图文件夹
视图(默认,如果在其他位置找不到,则应从此处获取) ICICI_Views SBI_Views FEDERAL_Views PNB_Views ....这些文件夹将包含布局和 cshtml 文件。 任何具有 return View() 或 return View("viewname") 的操作都应从受尊重的客户端文件夹中选择相应的视图。
如果有人知道实现此功能的任何解决方案(例如配置 RouteConfig 或 DisplayModeProvider 类等),请帮助我。我不想在每个返回视图语句中都进行 if-else 检查并指定完整路径。
提前致谢:)
【问题讨论】:
你调查过区域吗? 听起来你想要的是一个多租户系统。在这种情况下,我建议您创建自己的 VirtualPathProvider。其次,相信client
的值是正确的并且不会被用户更改,这确实是个坏主意。您的用户应该有一个客户端 ID,它应该确定一个视图,而不是任何人都可以在浏览器中更改的外部源。
@Shyju,我会调查区域,但是否可以仅在单独的区域中查看?我不认为。如果可能的话,如何配置何时返回哪个视图?
@Erik Philips,我不清楚 VirtualPathProvider。会检查。谢谢
【参考方案1】:
你可以在action方法返回时指定视图的路径,例如如果客户端是ICICI那么return View("~/ICICI_Views/Home/Index.cshtml");如果没有发现客户可以使用 return View();
return View("~/ICICI_Views/Home/Index.cshtml");
【讨论】:
所以你建议每个方法手动确定哪个视图应该用于哪个客户端?以上是关于基于 URL 参数的多个视图文件夹的主要内容,如果未能解决你的问题,请参考以下文章