我有一个MVC4应用程序,其中我使用51 51Degrees (Lite)检测设备,并相应地选择移动(.mobile.cshtml)或桌面(.cshtml)视图。51 51Degrees可以很好地完成那项工作。但是,如果我想使用HttpContext.SetOverriddenBrowser(BrowserOverride.Desktop)从Mobile切换到Desktop视图(在移动设备上),它就不能工作。FYI,它不需要51 51Degrees。
下面是选择显示模式的代码(Application_Start()在Global.asax.cs中):
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("mobile")
{ContextCondition = Context =>Context.Request.Browser["IsMobile"] == "True"
});以下是视图开关控制器操作代码:
public class ViewSwitcherController : Controller
{
public RedirectResult SwitchView(bool mobile, string ReturnUrl="/Login/Login")
{
// If the mobile user has requested to view the mobile view
// remove any overridden user agent for the current request
if (Request.Browser.IsMobileDevice == mobile)
HttpContext.ClearOverriddenBrowser();
else
// Otherwise override the browser setting to desktop mode
HttpContext.SetOverriddenBrowser(mobile ? BrowserOverride.Mobile : BrowserOverride.Desktop);
return Redirect(ReturnUrl);
}
}下面是视图中切换到桌面视图的代码:
@Html.ActionLink("Desktop view", "SwitchView", "ViewSwitcher", new { mobile = false, ReturnUrl = Request.Url.PathAndQuery }, new { rel = "external" })如果我遗漏了什么请告诉我。
提前谢谢。
发布于 2013-07-25 06:52:14
抱歉,我的回答太迟了。
其中一位开发人员在51 51Degrees上提供了以下解决方案:
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("mobile")
{
ContextCondition = Context => Context.GetOverriddenBrowser()["IsMobile"] == "true"
});因此,将Context.Request.Browser"IsMobile“替换为Context.GetOverriddenBrowser()"IsMobile”解决了我的问题。
希望这能有所帮助。
发布于 2013-06-24 06:45:50
我知道这有点过时,但我今晚碰到了这个。同样的症状。没有Mobi51工作,不使用。我的工作理论是,Request.Browser.IsMobileDevice受到Mobi51的影响,它控制了该属性并设置了它的值,而不管您期望.NET如何处理它。
我现在的解决办法就是这个。当我签入viewstart文件以切换布局时,我会检查Request.Browser.IsMobileDevice和Context.GetOverridenBrowser().IsMobileDevice都是真的。
当它是真正的移动,两者都将是真的。当它是真正的桌面时,两者都是假的。当它是请求桌面的移动视图时,Request.Browser.IsMobileDevice将是真(因为Mobi51这么说),Context.GetOverridenBrowser().IsMobileDevice将是假的。这是我的观点
@{
Layout = Request.Browser.IsMobileDevice && Context.GetOverriddenBrowser().IsMobileDevice
? "~/Views/Shared/_LayoutMobile.cshtml"
: "~/Views/Shared/_Layout.cshtml";
}我仍然在审查这个问题,还必须在移动切换中添加桌面(我已经看到了一个问题,但改变这个方向也很容易,但在我今晚进行的五分钟测试中,这已经奏效了。)我很好奇你是否找到了另一个理由/方法来解决这个问题,或者这个解决方案对你来说是令人满意的。
https://stackoverflow.com/questions/16687410
复制相似问题