相同的控制器但mvc3中的视图不同

时间:2012-07-19 09:27:55

标签: asp.net-mvc asp.net-mvc-3

我已经在asp.net mvc3 / c#/ Razor中创建了一个应用程序,现在我想为同一个应用程序实现新模板,我想使用相同的控制器逻辑但是视图会有所不同我将如何做到这一点? 。例如:如果有些人从阿联酋访问我的网站,我想要模板 A ,但如果有人在其他任何地方查看我的网站,我想向他展示我的模板 B 。有没有办法在asp.net mvc 3

中拥有相同的控制器但视图不同

3 个答案:

答案 0 :(得分:1)

你有一个NuGet package。在ASP.NET MVC 4中它是内置的。此程序包测试用户代理以便提供视图的移动版本。它为此实现了一个自定义视图引擎。它可以扩展,以便您使用Request.UserHostAddress(IP)代替使用用户代理,以便分派到正确的文件夹。就用户IP和国家/地区之间的映射而言,那就是您必须自己实现或使用现有的公共API。

答案 1 :(得分:1)

您可以创建自定义视图引擎并覆盖方法以调整路径。

public class LocationAwareViewEngine: RazorViewEngine
{
   protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
   {
      // adjust the viewPath and masterPath
      return base.CreateView(controllerContext, viewPath, masterPath);
   }

   protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
   {
        // adjust the partialPath
        return base.CreatePartialView(controllerContext, partialPath);
   }

   protected override bool FileExists(ControllerContext controllerContext, string virtualPath)
   {
      // adjust the virtualPath
      return base.FileExists(controllerContext, virtualPath);
   }
}

<强>的Global.asax.cs

ViewEngines.Engines.Add(new LocationAwareViewEngine());

答案 2 :(得分:0)

我相信很简单。使用_viewstart页面和布局页面。在_viewstart页面中,编写条件逻辑以检查请求是否来自U.A.E并切换布局页面以供使用。

 If "this is uae request" then
Layout = "layout1.vbhtml"
else
Layout = "layout2.vbhtml"
End if