我有一个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
答案 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时,您可以切换视图代码,以允许用户通过您用来设置它的相同操作再次禁用它。