Our new Web site UI includes an ASP menu that renders dynamic menus when the user hovers static menu items. However, even that the Web site was running well on the development machine, it didn’t work well after publishing it to our Windows Server 2003 host:
At first, the dynamic menus were rendering as white rectangles. To resolve this we needed to install a hot fix on Windows Server (as explained here).
After that, it worked great in Internet Explorer 8, but on Mozilla Firefox and Opera the dynamic menus were rolling behind a Silverlight object also displayed (in the Home page). To resolve this we needed to apply windowless = true on the Silverlight HTML object (as explained here).
Update: A separate issue was found on Safari and Windows Mobile Internet Explorer browsers: dynamic menus didn’t work, i.e. they contained an “Expand …” alt text appended to the menu item link, so instead of “Company” menu item “Company Expand Company” was displayed. Moreover, clicking the link wouldn’t even execute the static menu item behavior. To resolve this we needed to add an expando property to the asp:Menu control tag: AdapterEnabled="false". After that they are displayed and work correctly: on Safari dynamic menus are displayed on hover, and on Windows Mobile Internet Explorer static menu items work as expected (of course, without dynamic menus on hovering, but this is acceptable).
Update: A similar issue with "Expand" not working links appeared on Google Chrome and some other browsers. To resolve there too, we finally needed to remove all browser adapters in ASP .NET Master Page (Page_Init method): Request.Browser.Adapters.Clear();
Update: It seems that the Page_Init method of the Master Page is not enough (at least not always – e.g. not OK on the first request immediately after restarting IIS): the code (Request.Browser.Adapters.Clear();) must be run within Page_PreInit method of a base page class (that is used to inherit actual Web site pages from), or within a HTTP Module Page.PreInit event handler, or within Global.asax, Application_BeginRequest event handler; the recommended solution is the latter.
Finally, it works!
I hope these above can help others too!