【问题标题】:Multiple View Folders Based on URL parameter基于 URL 参数的多个视图文件夹
【发布时间】: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。会检查。谢谢

标签: c# asp.net-mvc viewpage


【解决方案1】:

你可以在action方法返回时指定视图的路径,例如如果客户端是ICICI那么return View("~/ICICI_Views/Home/Index.cshtml");如果没有发现客户可以使用 return View();

return View("~/ICICI_Views/Home/Index.cshtml");

【讨论】:

  • 所以你建议每个方法手动确定哪个视图应该用于哪个客户端?
猜你喜欢
  • 2015-06-24
  • 2011-03-12
  • 1970-01-01
  • 2013-01-03
  • 2017-05-13
  • 2016-03-31
  • 1970-01-01
  • 2012-01-25
  • 2013-03-23
相关资源
最近更新 更多