基于URL参数的多个视图文件夹

时间:2018-11-14 05:24:32

标签: c# asp.net-mvc viewpage

我已经为我们的一位客户开发了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();

我想要的是为每个客户端使用单独的View文件夹

  • 视图(默认,如果在其他位置找不到,则应从此处获取)
  • ICICI_Views
  • SBI_Views
  • FEDERAL_Views
  • PNB_Views
  • ....

这些文件夹将包含布局和cshtml文件。 具有 return View() return View(“ viewname”)的任何操作都应从受关注的客户端文件夹中选择相应的视图。

如果有人知道实现此目的的任何解决方案(例如配置RouteConfig或DisplayModeProvider类等),请帮助我。我不想在每个return view语句中进行if-else检查并指定完整路径。

预先感谢:)

1 个答案:

答案 0 :(得分:0)

您可以在从操作方法返回时指定视图的路径,例如,如果客户端是ICICI,则 return View(“〜/ ICICI_Views / Home / Index.cshtml”); 找不到客户可以使用 return View();

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