C# 带asp.net菜单控件的iPad iOS 5

C# 带asp.net菜单控件的iPad iOS 5,c#,asp.net,ipad,menu,ios5,C#,Asp.net,Ipad,Menu,Ios5,我正在开发一个使用asp.net菜单标记的intranet站点,当鼠标悬停在特定链接上时,子菜单会弹出 我们必须包括对iPhone和iPad的支持。iPhone的网站将完全不同,因此这不会是一个问题。然而,在iPad上,该网站本身与台式机/笔记本电脑用户相比没有重大变化 我遇到的问题是,升级到iOS 5后,asp菜单中内置的onMouseOver事件没有触发(这意味着当我点击菜单项一次时,它会表现为我点击了两次)。在iOS 4+中,该控件可以正常工作(点击一次以获取菜单项列表,然后再次点击以跟踪

我正在开发一个使用asp.net菜单标记的intranet站点,当鼠标悬停在特定链接上时,子菜单会弹出

我们必须包括对iPhone和iPad的支持。iPhone的网站将完全不同,因此这不会是一个问题。然而,在iPad上,该网站本身与台式机/笔记本电脑用户相比没有重大变化

我遇到的问题是,升级到iOS 5后,asp菜单中内置的onMouseOver事件没有触发(这意味着当我点击菜单项一次时,它会表现为我点击了两次)。在iOS 4+中,该控件可以正常工作(点击一次以获取菜单项列表,然后再次点击以跟踪链接)

我已经实现了所建议的解决方法,实现了一个调用空javascript函数的mouseover事件

一个小标记来说明问题:

<asp:Menu runat="server" ID="Menu1" /* Any other control additions here */>
  <Items>
     <asp:MenuItem Text="MenuItem1" Value="MenuItem1" />
     <asp:MenuItem Text="MenuItem2" Value="MenuItem2" />
  </Items>
</asp:Menu>
另外:很抱歉,如果有类似的问题,我找不到

编辑

在对它进行了一些测试之后,我发现只有当原来的菜单项实际上不打算去任何地方时,它才会起作用。然而,情况并非总是如此。所以这实际上是一个比我想象的更大的问题

通过使用MenuItemClick事件、ViewState和检查UserAgent(可能不是最优雅的解决方案,但它符合我的需要),我改变了(现在不是那么简单)解决方法来解决这种情况

这甚至比以前的解决方案更不“优雅”(虽然更全面,但公平地说,我没有像我希望的那样对其进行测试)

所以我这里有几个问题。即:

  • 有没有更好的方法来做到这一点,似乎不那么黑客

  • 这是iOS的一个bug还是asp.net菜单的bug(或者根本没有?)(你知道还有其他控件需要这样做吗

  • 编辑(2012年3月21日):我已经确认这仍然是iOS 5.1的一个问题。我的解决方案仍然能满足我的需要,但看起来我仍然在解决一个bug或类似的问题

    MenuItem mnu_itm = new MenuItem();
    mnu_itm.Text = "ADMIN";
    mnu_itm.Value = "";
    mnu_itm.NavigateUrl = "javascript:(function(){})();";
    
    string ItemNavUrl = Menu1.SelectedItem.NavigateUrl;
    string ItemName = Menu1.SelectedItem.Text;
    
    //Check the ViewState first, just in case another menu item was clicked.  
    if (ViewState["MenuItemNav"] != null && Menu1.SelectedItem.NavigateUrl == "" && ViewState["MenuItemName"] != null && (string)ViewState["MenuItemName"] == Menu1.SelectedItem.Text)
    {
        Menu1.SelectedItem.NavigateUrl = (string)ViewState["MenuItemNav"];
    }
    //Check to see if: 1. The item has a submenu 
    //2. The Item also has a valid URL to send to, and 
    //3. If the device is an iPad 
    else if(Menu1.SelectedItem.ChildItems.Count > 0 && Menu1.SelectedItem.NavigateUrl != "" && Request.UserAgent.IndexOf("iPad") > -1) 
    {
       //Set the URL to nothing and save the values for later.
       Menu1.SelectedItem.NavigateUrl = "";
       ViewState.Add("MenuItemNav", ItemNavUrl);
       ViewState.Add("MenuItemName", ItemName);
    }