首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视图开关不适用于51 51Degrees

视图开关不适用于51 51Degrees
EN

Stack Overflow用户
提问于 2013-05-22 08:50:11
回答 2查看 1.1K关注 0票数 1

我有一个MVC4应用程序,其中我使用51 51Degrees (Lite)检测设备,并相应地选择移动(.mobile.cshtml)或桌面(.cshtml)视图。51 51Degrees可以很好地完成那项工作。但是,如果我想使用HttpContext.SetOverriddenBrowser(BrowserOverride.Desktop)从Mobile切换到Desktop视图(在移动设备上),它就不能工作。FYI,它不需要51 51Degrees。

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

代码语言:javascript
复制
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("mobile")
 {ContextCondition = Context =>Context.Request.Browser["IsMobile"] == "True"
 });

以下是视图开关控制器操作代码:

代码语言:javascript
复制
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);
    }

}

下面是视图中切换到桌面视图的代码:

代码语言:javascript
复制
@Html.ActionLink("Desktop view", "SwitchView", "ViewSwitcher", new { mobile = false, ReturnUrl = Request.Url.PathAndQuery }, new { rel = "external" })

如果我遗漏了什么请告诉我。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-25 06:52:14

抱歉,我的回答太迟了。

其中一位开发人员在51 51Degrees上提供了以下解决方案:

代码语言:javascript
复制
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("mobile")            
{
ContextCondition = Context => Context.GetOverriddenBrowser()["IsMobile"] == "true"
});

因此,将Context.Request.Browser"IsMobile“替换为Context.GetOverriddenBrowser()"IsMobile”解决了我的问题。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2013-06-24 06:45:50

我知道这有点过时,但我今晚碰到了这个。同样的症状。没有Mobi51工作,不使用。我的工作理论是,Request.Browser.IsMobileDevice受到Mobi51的影响,它控制了该属性并设置了它的值,而不管您期望.NET如何处理它。

我现在的解决办法就是这个。当我签入viewstart文件以切换布局时,我会检查Request.Browser.IsMobileDeviceContext.GetOverridenBrowser().IsMobileDevice都是真的。

当它是真正的移动,两者都将是真的。当它是真正的桌面时,两者都是假的。当它是请求桌面的移动视图时,Request.Browser.IsMobileDevice将是真(因为Mobi51这么说),Context.GetOverridenBrowser().IsMobileDevice将是假的。这是我的观点

代码语言:javascript
复制
@{
Layout = Request.Browser.IsMobileDevice && Context.GetOverriddenBrowser().IsMobileDevice
      ? "~/Views/Shared/_LayoutMobile.cshtml"
      : "~/Views/Shared/_Layout.cshtml";        
}

我仍然在审查这个问题,还必须在移动切换中添加桌面(我已经看到了一个问题,但改变这个方向也很容易,但在我今晚进行的五分钟测试中,这已经奏效了。)我很好奇你是否找到了另一个理由/方法来解决这个问题,或者这个解决方案对你来说是令人满意的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16687410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档