View Switch无法使用51Degrees

时间:2013-05-22 08:50:11

标签: asp.net-mvc-4 51degrees

我有一个MVC4应用程序,我使用51Degrees(Lite)检测设备,并相应地选择移动( .mobile.cshtml)或桌面( .cshtml)视图。 51Degrees可以正确地完成这项工作。但是,如果我想使用 HttpContext.SetOverriddenBrowser(BrowserOverride.Desktop)从移动设备切换到桌面视图(在移动设备上),它将无效。仅供参考,它没有51Degrees。

以下是选择显示模式的代码(Global.asax.cs中的Application_Start()):

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" })

如果我遗失了什么,请告诉我。

提前致谢。

2 个答案:

答案 0 :(得分:1)

对不起我的延迟回答。

以下解决方案由51Degrees的一位开发人员提供:

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("mobile")            
{
ContextCondition = Context => Context.GetOverriddenBrowser()["IsMobile"] == "true"
});

所以用Context.GetOverriddenBrowser()[“IsMobile”]替换Context.Request.Browser [“IsMobile”]修复了我的问题。

希望有所帮助。

答案 1 :(得分:0)

我知道这有点过时了,但今晚我遇到了这个问题。同样的症状。没有Mobi51的工作,没有。我的工作原理是Mobi51触及了Request.Browser.IsMobileDevice,它控制了该属性并设置了它的值,而不管你对.NET的期望是什么。

我目前的解决方案就是这样。当我检查我的viewstart文件以切换布局时,我检查两者 Request.Browser.IsMobileDevice Context.GetOverridenBrowser()。IsMobileDevice 是真的。

当它真正移动时,两者都将成为现实。当它真正是桌面时,两者都是假的。当它是一个请求桌面的移动视图时,Request.Browser.IsMobileDevice将为true(因为Mobi51这样说)和Context.GetOverridenBrowser()。IsMobileDevice将为false。这是我的观察开始

@{
Layout = Request.Browser.IsMobileDevice && Context.GetOverriddenBrowser().IsMobileDevice
      ? "~/Views/Shared/_LayoutMobile.cshtml"
      : "~/Views/Shared/_Layout.cshtml";        
}

我还在审查这个并且必须将桌面添加到移动切换中(我已经可以看到问题了,但是使这个方向工作的改变也很容易,但到目前为止我的五分钟测试中)今晚这个有用。我很好奇你是否找到了另一个理由/方法来解决这个问题,或者这个解决方案对你来说是否令人满意。