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






4.94/5 (11投票s)
ASP.NET 菜单控件在 Chrome 和 Safari 中显示不正确
引言
在使用 ASP.NET 菜单控件时,Safari 和 Chrome 都无法正确渲染该控件。 这就是为什么鼠标悬停在 Chrome 和 Safari 中的 ASP.NET 菜单控件上时无法正常工作,如下面的图片所示。
Safari
Chrome
而 Mozilla Firefox 和 Internet Explorer 则可以完美运行。
IE9
Mozilla Firefox
解决方案
正如您所看到的,主菜单的外观和感觉不同。 子菜单没有显示出来。 那么解决办法是什么? 我在 Google 上搜索,发现以下 3 种解决方案可以完美工作。
方法 1
- 在 Visual Studio 的解决方案资源管理器中,添加名为“APP_Broswers”的“ASP.NET 文件夹”。
- 将“浏览器文件”新项目添加到此特殊文件夹,并将其命名为“safari.browser”,适用于 Chrome 和 Safari 浏览器。
- 现在,删除 safari.browser 文件中所有预先添加的数据。
- 现在将以下标签添加到该浏览器文件
<browsers> <browser refID="safari1plus"> <controlAdapters> <adapter controlType="System.Web.UI.WebControls.Menu" adapterType="" /> </controlAdapters> </browser> </browsers>
- 现在,您只需要保存该文件即可。
步骤
方法 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
享受这个技巧吧!!!