显示平板电脑的桌面版

时间:2012-06-11 07:59:31

标签: mobile asp.net-mvc-4

如果用户从平板电脑访问该网站,我正在尝试显示该网站的桌面版本。方法contextCheck_WithDirectMethod确实返回false,但移动版仍然在我的ipad上显示。如何解决这个问题的任何帮助将非常感激。

protected void Application_BeginRequest(object sender, EventArgs e)
    {
        System.Func<HttpContextBase, bool> contextCheckDelegate = contextCheck_WithDirectMethod;
        DefaultDisplayMode mobileMode = new DefaultDisplayMode("mobile");
        mobileMode.ContextCondition = contextCheckDelegate;
        DisplayModeProvider.Instance.Modes.Add(mobileMode);
    }
    public bool contextCheck_WithDirectMethod(HttpContextBase objHttpContextBase)
    {

        bool isTablet = false;
        string varBrowserAgent = objHttpContextBase.Request.UserAgent;
        if (!string.IsNullOrEmpty(varBrowserAgent))
        {
            varBrowserAgent = varBrowserAgent.ToString().ToLower();
            if (varBrowserAgent.Contains("ipad") || (varBrowserAgent.Contains("android") && !varBrowserAgent.Contains("mobile")))
            {
                isTablet = true;
                objHttpContextBase.ClearOverriddenBrowser();
            }
        }

        if (!isTablet)
        {
            if (objHttpContextBase.GetOverriddenBrowser().IsMobileDevice)
            {
                return true;
            }
        }

        if (!string.IsNullOrEmpty(varBrowserAgent))
        {
            varBrowserAgent = varBrowserAgent.ToString().ToLower();

            if (objHttpContextBase.Request.Browser.IsMobileDevice == true || varBrowserAgent.Contains("ipod") || varBrowserAgent.Contains("ipad")
             || varBrowserAgent.Contains("iphone") || varBrowserAgent.Contains("android") || varBrowserAgent.Contains("iemobile"))
            {
                if (isTablet)
                    return false;
                else
                    return true;
            }
        }
        return false;
    }

2 个答案:

答案 0 :(得分:0)

显示模式逻辑按照注册顺序查找匹配项。默认移动模式在您添加之前已注册,因此永远不会评估您的新移动模式。

一般模式是在索引0处插入新的显示模式,而不是添加显示模式。而不是:

DisplayModeProvider.Instance.Modes.Add(mobileMode);

使用:

DisplayModeProvider.Instance.Modes.Insert(0, mobileMode);

或者,您可以更改浏览器定义(例如C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ Browsers)以指示iPad不是移动设备,但这可能会变得复杂。

另外,有人要注意:显然iPad sometimes reports a different user agent。您的设备模式选择逻辑需要考虑这两种情况。

答案 1 :(得分:0)

您可以查看平板电脑设备中的可用像素数:

var isTablet = httpContext.Request.Browser.IsMobileDevice && httpContext.Request.Browser.ScreenPixelsWidth > 768