我是MVC的新手,从MVC 4开始。我想开一个在线商店应用程序。
- 两个不同的网站/域将使用相同的购物逻辑。
- 视图必须根据域名及其移动版本进行更改。
逻辑文件结构如下:
Controllers/HomeController.cs
Controllers/ProductController.cs
Models/Home.cs
Models/Product.cs
查看第一个域的文件结构:
Views/my_1st_Domain/Home/Index.cshtml
Views/my_1st_Domain/Home/Index.Mobile.cshtml
Views/my_1st_Domain/Home/Terms.cshtml
Views/my_1st_Domain/Home/Terms.Mobile.cshtml
Views/my_1st_Domain/Product/Index.cshtml
Views/my_1st_Domain/Product/Index.Mobile.cshtml
Views/my_1st_Domain/Product/Detail.cshtml
Views/my_1st_Domain/Product/Detail.Mobile.cshtml
查看第二个域的文件结构:
Views/my_2nd_Domain/Home/Index.cshtml
Views/my_2nd_Domain/Home/Index.Mobile.cshtml
Views/my_2nd_Domain/Home/Terms.cshtml
Views/my_2nd_Domain/Home/Terms.Mobile.cshtml
Views/my_2nd_Domain/Product/Index.cshtml
Views/my_2nd_Domain/Product/Index.Mobile.cshtml
Views/my_2nd_Domain/Product/Detail.cshtml
Views/my_2nd_Domain/Product/Detail.Mobile.cshtml
问题是: 如何在域特定视图文件夹之间自动切换?
可以通过在任何地方重复此行来手动完成:
return View("~/Views/" + getDomainSpecificFolder() + "/Home/Index" + getMobileSuffixIfNeeded() + ".cshtml");
有没有更简单的方法可以一次性全局更改基本视图文件夹?
提前致谢,
答案 0 :(得分:4)
您可以创建自己的ViewEngine,并根据您当前的域返回特定视图。 在控制器代码中,您只需要返回通常的
return View();
所有逻辑都将在自定义ViewEngine中处理。
以下是有关它的一些细节 -
基本上你需要创建CustomViewEngine
类,继承RazorViewEngine
并在global.asax
中注册它。然后在该课程中,您需要覆盖FindView
方法,该方法将使用基于您的域的视图路径。