iPad iOS 5 с управлением меню asp.net - PullRequest
1 голос
/ 21 декабря 2011

Я разрабатываю сайт интрасети, в котором используется тег меню asp.net, и при наведении указателя мыши на конкретную ссылку появляется подменю.

Единственное, что мы должны включить, - это поддержка iPhone и iPad.Сайт для iPhone будет совершенно другим, так что это не будет проблемой.Тем не менее, на iPad нет существенных изменений в самом сайте по сравнению с пользователем настольного компьютера / ноутбука.

Проблема, с которой я столкнулся, заключалась в том, что после обновления до iOS 5 встроенное событие onMouseOver из меню asp не срабатывает (это означает, что когда я один раз касаюсь элемента меню, он будет действовать какдважды постучал)В iOS 4. + элемент управления будет работать нормально (нажмите один раз, чтобы получить список пунктов меню, а затем снова нажмите, чтобы перейти по ссылке).

Я реализовал обходной путь, предложенный в этом посте Project Code , реализующий событие mouseover, которое вызывает нулевую функцию javascript.

Небольшая разметка для иллюстрации проблемы:

<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>

И как я реализовал исправление:

MenuItem mnu_itm = new MenuItem();
mnu_itm.Text = "ADMIN";
mnu_itm.Value = "";
mnu_itm.NavigateUrl = "javascript:(function(){})();";

Также: Извините, если есть похожий вопрос, яне мог найти это.

Редактировать

После небольшого тестирования этого я обнаружил, что это будет работать только в том случае, если исходный пункт меню не предназначен для чего-либо.Однако это не всегда так.Так что это на самом деле большая проблема, чем я думал.

Я изменил (теперь не так просто) обходной путь, чтобы охватить эту ситуацию, используя событие MenuItemClick, ViewState и проверяя UserAgent (возможно, не самое элегантное решение, но оно соответствует моим потребностям)

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);
}    

Это даже менее "элегантно", чем предыдущее решение (хотя оно и более всеобъемлющее, хотя, честно говоря, я не бросил в него столько испытаний, сколько хотел бы).

ИтакУ меня есть несколько вопросов здесь.А именно:

  1. Есть ли лучший способ сделать это, который не выглядит таким хакерским?

  2. Это ошибка в iOS или просто в меню asp.net (или вообще?). Есть ли другие элементы управления, на которых это понадобится (о которых вы знаете)?

Редактировать (21.03.2012): Я подтвердил, что это все еще проблема для iOS 5.1.Мой обходной путь все еще дает мне то, что мне нужно, но все равно кажется, что я работаю над ошибкой или чем-то подобным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...