C# 创建自定义视图切换器作为Mvc4移动内置机制

C# 创建自定义视图切换器作为Mvc4移动内置机制,c#,asp.net-mvc-4,view,C#,Asp.net Mvc 4,View,有没有可能像MVC4 mobile那样创建我自己的自定义“视图切换器” 例如: 如果我将视图名称更改为“_Layout.Mobile.cshtml”,则如果用户代理是移动设备,它将自动呈现视图。 我希望在一个项目中管理两个站点,因此我希望允许按配置(web.config)以相同的方式调用视图 例如: Account.Project1.cshtml(如果配置为项目1) Account.Project2.cshtml(如果配置为项目2) Account.Mobile.cshtml(如果从手机中调用)

有没有可能像MVC4 mobile那样创建我自己的自定义“视图切换器”

例如:
如果我将视图名称更改为“_Layout.Mobile.cshtml”,则如果用户代理是移动设备,它将自动呈现视图。
我希望在一个项目中管理两个站点,因此我希望允许按配置(web.config)以相同的方式调用视图

例如:
Account.Project1.cshtml(如果配置为项目1)
Account.Project2.cshtml(如果配置为项目2)
Account.Mobile.cshtml(如果从手机中调用)
Account.Project1.Mobile.cshtml(如果从Mobile和project 1调用)
Account.cshtml(默认值)

我试着用谷歌搜索一下,但没有发现任何关于这个主题的问题


谢谢。

您可以展开
默认显示模式

  public class MobileDisplay : DefaultDisplayMode
  {
    public MobileDisplay()
      // postfix of the file
      : base("mobile")
    {
      // create an expression if the current postfix is applicatble
      ContextCondition = context => context.Request.Browser.IsMobileDevice;
    }
  }
您可以在应用程序开始中插入:

DisplayModeProvider.Instance.Modes.Insert(0, new MobileDisplay());
这与路由和异常类似。第一场比赛获胜,这就是我的示例将其插入索引0的原因。
布局不是由此选项选择的。您可以根据cshtml文件或在
\u ViewStart.cshtml
文件中设置布局视图。 当然,您只能在具体视图中设置移动布局,也可以根据逻辑在
\u ViewStart
中设置:

@{
  if (Request.Browser.IsMobileDevice)
  {
    Layout = "Shared/_Layout.mobile.cshtml";
  }
  else
  {
    Layout = "Shared/_Layout.cshtml";
  }
}

您可以为每个项目创建自定义视图引擎,并将
ViewLocationFormats
替代为locae视图。供参考检查