2012-06-11 155 views
3

如果用户从平板电脑访问网站,我试图显示该网站的桌面版本。方法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; 
    } 

回答

0

显示模式逻辑按照它们注册的顺序查找匹配项。默认的移动模式是在添加你的模式之前注册的,所以你的新移动模式永远不会被评估。

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

DisplayModeProvider.Instance.Modes.Add(mobileMode); 

使用:

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

或者,您可以更改浏览器定义(例如C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \浏览器)来表示iPad不是移动设备,但可能会变得复杂。

此外,一个gotcha要知道:显然iPad sometimes reports a different user agent。您的设备模式选择逻辑需要考虑这两种情况。

0

您可以检查在平板设备提供的像素数:

var isTablet = httpContext.Request.Browser.IsMobileDevice && httpContext.Request.Browser.ScreenPixelsWidth > 768 
相关问题