如何创建一个按钮以在我的MVC站点的移动和桌面模式之间切换?

时间:2015-06-03 12:40:49

标签: android asp.net-mvc asp.net-mvc-4 jquery-mobile mobile

我有一个MVC站点,可以检测正在使用的设备(移动或桌面浏览器)并显示相应的视图:MySite.cshtml或MySite.Mobile.cshtml。这工作正常。我希望能够在网站上有一个按钮,在这两种模式之间切换。我怎么能这样做?

我想做的一件事是让桌面用户能够查看移动版本。我会这样做为客户演示这个。我还可以看到移动用户可能希望看到桌面视图的原因(例如,他们的智能手机上有一个更大的屏幕,或者他们的通用平板电脑被识别为移动设备)。

以下是我选择移动或桌面视图的方式:

的Global.asax.cs

public class MvcApplication : System.Web.HttpApplication
{
 protected void Application_Start()
 {
  AreaRegistration.RegisterAllAreas();
  BundleConfig.RegisterBundles(BundleTable.Bundles);
  WebApiConfig.Register(GlobalConfiguration.Configuration);
  FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  RouteConfig.RegisterRoutes(RouteTable.Routes);
  DeviceConfig.EvaluateDisplayMode();
 }
}

DeviceConfig.cs

public static void EvaluateDisplayMode()
{
 DisplayModeProvider.Instance.Modes.Insert(0,
  new DefaultDisplayMode(DeviceTypePhone)
  {
   ContextCondition = (ctx => (
    (ctx.GetOverriddenUserAgent() != null) &&
     (
      (ctx.GetOverriddenUserAgent().IndexOf("android", StringComparison.OrdinalIgnoreCase) >= 0) ||
      (ctx.GetOverriddenUserAgent().IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0) ||
      (ctx.GetOverriddenUserAgent().IndexOf("Window Phone", StringComparison.OrdinalIgnoreCase) >= 0)||
      (ctx.GetOverriddenUserAgent().IndexOf("Blackberry", StringComparison.OrdinalIgnoreCase) >= 0)
      )
    ))
   });

这会创建它,以便移动设备使用视图MySite.Mobile.cshtml和桌面网站使用MySite.cshtml。

我可以在DeviceConfig.cs的末尾添加一行代码,如下所示

                    ||
                    (ctx.GetOverriddenUserAgent().IndexOf("webkit", StringComparison.OrdinalIgnoreCase) >= 0) ||
                    (ctx.GetOverriddenUserAgent().IndexOf("moz", StringComparison.OrdinalIgnoreCase) >= 0)

这样Chrome等桌面浏览器就会被识别为移动网站。

如何创建按钮(或其他控件)以在这两个版本的网站之间切换?

所以点击一个名为" Mobile Version&#34的按钮;将调用MySite.Mobile.cshtml并单击名为"桌面版本"的按钮。会调用MySite.cshtml。

这是一个讨论这个问题的问题,但他们似乎以不同的方式实施移动网站。我现在不想改变我选择移动网站的方式(项目已经完成,移动网站正在移动设备上运行)。但是,我认为有人可能能够将这个建议与我的问题相协调。我已经尝试过并且能够这样做了。 Switching between a custom mobile display mode and desktop mode in ASP.NET MVC4

1 个答案:

答案 0 :(得分:0)

我过去做过类似的事情。让你的"切换到桌面"指向一个设置bool会话变量的动作(让他们说" FORCEDESKTOP")为true。这将用于“强迫”#34;该网站进入桌面/移动模式。

然后,在检查查看器的代码中:

public static void EvaluateDisplayMode()
{
   DisplayModeProvider.Instance.Modes.Insert(0,
      new DefaultDisplayMode(DeviceTypePhone)
   {
       ContextCondition = (ctx => (
           (ctx.GetOverriddenUserAgent() != null) &&
           (
           (ctx.GetOverriddenUserAgent().IndexOf("android", StringComparison.OrdinalIgnoreCase) >= 0) ||
           (ctx.GetOverriddenUserAgent().IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0) ||
           (ctx.GetOverriddenUserAgent().IndexOf("Window Phone", StringComparison.OrdinalIgnoreCase) >= 0)||
           (ctx.GetOverriddenUserAgent().IndexOf("Blackberry", StringComparison.OrdinalIgnoreCase) >= 0) ||
            Convert.ToBoolean(HttpContext.Session["FORCEDESKTOP"]) != true
            )
        ))
});

然后,当FORCEDESKTOP为true时,您可以切换视图代码,以允许用户通过您用来设置它的相同操作再次禁用它。