MVC 4具有不同视图文件夹的相同逻辑

mus*_*ürk 5 c# asp.net-mvc-4

我是MVC的新手,从MVC 4开始.我想创建一个在线商店应用程序.

- 两个不同的网站/域将使用相同的购物逻辑.

- 视图必须根据域名及其移动版本进行更改.

逻辑文件结构如下:

Controllers/HomeController.cs
Controllers/ProductController.cs
Models/Home.cs
Models/Product.cs
Run Code Online (Sandbox Code Playgroud)

查看第一个域的文件结构:

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
Run Code Online (Sandbox Code Playgroud)

查看第二个域的文件结构:

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
Run Code Online (Sandbox Code Playgroud)

问题是:如何在域特定视图文件夹之间自动切换?

它可以通过在任何地方重复此行来手动完成:

return View("~/Views/" + getDomainSpecificFolder() + "/Home/Index" + getMobileSuffixIfNeeded() + ".cshtml");
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来全局更改基本视图文件夹?

提前致谢,

Ser*_*nov 5

您可以创建自己的 ViewEngine,并根据您当前的域返回特定视图。在控制器代码中,您只需要正常返回

return View();
Run Code Online (Sandbox Code Playgroud)

并且所有逻辑都将在自定义 ViewEngine 中处理。

这是有关它的一些详细信息-

基本上你需要创建CustomViewEngine类,它继承RazorViewEngine并在global.asax. 然后在该类中,您需要覆盖FindView方法,该方法将使用基于域的视图路径。