65.9K
CodeProject 正在变化。 阅读更多。
Home

Chrome 和 Safari 中 ASP.NET 菜单控件的问题

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.94/5 (11投票s)

2012年7月27日

CPOL

1分钟阅读

viewsIcon

94471

downloadIcon

201

ASP.NET 菜单控件在 Chrome 和 Safari 中显示不正确

引言

在使用 ASP.NET 菜单控件时,Safari 和 Chrome 都无法正确渲染该控件。 这就是为什么鼠标悬停在 Chrome 和 Safari 中的 ASP.NET 菜单控件上时无法正常工作,如下面的图片所示。

Safari

Chrome

而 Mozilla Firefox 和 Internet Explorer 则可以完美运行。

IE9

Mozilla Firefox

解决方案

正如您所看到的,主菜单的外观和感觉不同。 子菜单没有显示出来。 那么解决办法是什么? 我在 Google 上搜索,发现以下 3 种解决方案可以完美工作。

方法 1

  1. 在 Visual Studio 的解决方案资源管理器中,添加名为“APP_Broswers”的“ASP.NET 文件夹”。
  2. 将“浏览器文件”新项目添加到此特殊文件夹,并将其命名为“safari.browser”,适用于 Chrome 和 Safari 浏览器。
  3. 现在,删除 safari.browser 文件中所有预先添加的数据。
  4. 现在将以下标签添加到该浏览器文件
    <browsers> 
        <browser refID="safari1plus"> 
            <controlAdapters> 
              <adapter controlType="System.Web.UI.WebControls.Menu" 
              adapterType="" /> 
            </controlAdapters> 
        </browser> 
    </browsers>
  5. 现在,您只需要保存该文件即可。

步骤

方法 2

另一种解决方案是使用服务器端代码。 为了修复此错误,我们需要将以下两行代码写入每个**页面**的 Page_PreInit 事件中,或者如果使用了 MasterPage 文件,则无需将这些行添加到每个页面,只需将这些行复制并粘贴到**主页**的 Page_PreInit 事件中即可。 此代码适用于 Safari 和 Chrome。

protected void Page_PreInit(object sender, EventArgs e)
{
    if(Request.ServerVariables["http_user_agent"].IndexOf
    ("Safari",StringComparison.CurrentCultureIgnoreCase) != -1)
    {
        Page.ClientTarget = "uplevel";
    }
}

或者使用这段替代代码

protected void Page_PreInit(object sender, EventArgs e)
{
  if (Request.UserAgent.Contains("AppleWebKit")) 
     Request.Browser.Adapters.Clear();
}

应用任何这些更改后,ASP.NET 菜单在所有浏览器中(如 **Mozilla Firefox、Internet Explorer、Safari** 和 **Chrome**)都能正常工作。

Chrome

Safari

享受这个技巧吧!!!

© . All rights reserved.