1

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

4

3 回答 3

1

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

于 2012-07-19T09:34:40.340 回答
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);
   }
}

全球.asax.cs

ViewEngines.Engines.Add(new LocationAwareViewEngine());
于 2012-07-19T10:07:23.373 回答
0

我相信很简单。使用 _viewstart 页面和布局页面。在 _viewstart 页面中,编写条件逻辑以检查请求是否来自阿联酋并切换要使用的布局页面。

 If "this is uae request" then
Layout = "layout1.vbhtml"
else
Layout = "layout2.vbhtml"
End if
于 2012-07-19T09:36:35.377 回答