我使用ASPNET.MVC4 RC创建了一个网站。对于每个视图,我创建了2个文件,如index.cshtml和index.Mobile.cshtml,它们代表桌面和移动视图。开箱即用的一切都很好 - 移动设备可以获得移动视图,非移动设备可以获得完整的桌面视图。 但是,我在尝试强制桌面视图到移动设备上时遇到问题(即,当用户点击“完整网站”链接时) - 视图不会更改,移动视图仍会呈现。 我使用以下代码来覆盖浏览器(从全局过滤器调用):
filterContext.RequestContext.HttpContext.SetOverriddenBrowser(BrowserOverride.Desktop);
我可以看到以下cookie被设置:.ASPXBrowserOverride = [Mozilla%2f4.0 +(兼容%3b + MSIE + 6.1%3b + Windows + XP)]作为此调用的结果,但显然它会被忽略某些原因。 在桌面浏览器上强制移动视图工作正常,即其他方式。 任何帮助将不胜感激。
感谢。
答案 0 :(得分:2)
此解决方案正常。
控制器:
public class ViewSwitcherController : Controller
{
//
// GET: /ViewSwitcher/
public RedirectResult SwitchView(bool mobile, string returnUrl)
{
if (Request.Browser.IsMobileDevice == mobile)
{
HttpContext.ClearOverriddenBrowser();
}
else
{
HttpContext.SetOverriddenBrowser(mobile ? BrowserOverride.Mobile : BrowserOverride.Desktop);
}
return Redirect(returnUrl);
}
}
查看:
<% if (ViewContext.HttpContext.GetOverriddenBrowser().IsMobileDevice)
{%>
<%= Html.ActionLink("Desktop - Version", "SwitchView", "ViewSwitcher",
new { mobile = false, returnUrl = Request.Url.PathAndQuery },
new { target = "_self" })%>
<% }
else
{%>
<%= Html.ActionLink("Mobile - Version", "SwitchView", "ViewSwitcher",
new { mobile = true, returnUrl = Request.Url.PathAndQuery },
new { target = "_self" })%>
<%}%>
答案 1 :(得分:2)
我找到了问题所在。如果有人陷入同一陷阱,这就是它:
当我创建项目时,我为我的设备配置类提取了内容,它将移动DefaultDisplayMode添加到DisplayModeProvider,来自Microsoft support forums上的支持答案。
该代码在Request.UserAgent中寻找特定于移动设备的字符串。但是,SetOverriddenBrowser()方法仅更改被覆盖的用户代理,Request.UserAgent保持不变。
因此,在分析客户的请求时,解决方案是将Request.UserAgent
替换为Context.GetOverriddenUserAgent()
。
答案 2 :(得分:0)
由于您尚未说明您已尝试过的内容或您用于网站设计的内容,请允许我建议您安装jquery mobile(您可以从Nuget获取)并查看它自动安装的视图切换器你可以看看它是如何做到的。这应该是一个很好的起点