alexvw Ответов: 1

Нечетное поведение веб-формы после установки clienteidmode в статическое состояние


Привет,

Я работаю в веб-форме, которая работала так, как ожидалось, прежде чем изменить свой ClientIdMode на статический. Очевидно, мне пришлось внести несколько корректив в код, так как множество панелей обновления в нем решили игнорировать набор AsyncPostBackTrigger или, по крайней мере, так мне показалось.

Как бы то ни было, после корректировки почти все вернулось в норму, за исключением странного поведения, которое я попытаюсь описать. Одна из многих существующих кнопок вызывает свой код за кодом и обновляет как БД, так и пользовательский интерфейс, как и ожидалось. Это событие устанавливает фокус на желаемом элементе управления.

protected void lkBtnOkDcto_Click(object sender, EventArgs e)
{
...
    txDocNum.Focus();
}
Я могу начать печатать в нем, как будто все было персиковым.

Вот в чем загвоздка. Когда я наведу курсор мыши на любой элемент управления (кнопку, linkbutton и т. д.), Все изменения CSS или стандартное поведение, такие как предварительный просмотр ссылок, настройки указателя и т. д., просто исчезнут. Я должен нажать в любом месте страницы, чтобы он "снова заработал".

Есть идеи?

Что я уже пробовал:

Я проверил код, который устанавливает фокус, обновляет каждую задействованную UpdatePanel, и каждый элемент управления (label, textbox, ddl и т. д.) получает правильную настройку.

Одна вещь, которую я заметил: когда я вынужден "щелкнуть" в любом месте, чтобы "повторно активировать" мышь, фокус отправляется на другой элемент управления, который не имеет установленного автофокуса, и его фокус никогда не устанавливается в коде позади.

Спасибо за Ваш вклад.

Vincent Maverick Durano

Я не удивлюсь, если вы получите странное поведение, потому что UpdatePanel-это просто "зло".

Как вы определяете свой CSS? Ваша проблема больше связана с наведением курсора мыши, верно? Если это так, то поищите любой скрипт/css в вашем проекте, который относится к наведению курсора мыши. Возможно, вы ссылаетесь на старые идентификаторы вместо новых статических идентификаторов.

alexvw

Привет, Винсент, спасибо за Ваш вклад.

Я действительно проверил все css/javascript и код позади, но без какой-либо удачи. Любая Контрольная ссылка всегда была настроена на контроль.ClientId (не использует жестко закодированные идентификаторы).

Я просто не могу точно определить, почему установлен фокус (где я хочу), нажатия клавиш работают так, как ожидалось, но не мышь. Я реализовал javascript, чтобы позволить навигацию с помощью клавиш со стрелками, нажав Enter, Tab, и все они работают просто отлично.

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

Буду продолжать чесать голову!

Vincent Maverick Durano

Ведет ли это себя во всех браузерах или это изолировано?

alexvw

Хороший вопрос! Винсент.

Теперь я могу сказать, насколько я устал; мне не пришло в голову проверить это (что я обычно и делаю). И он постоянен во всех браузерах = это не браузер, это мой код. (Проверено: FF, Opera, Chrome, Vivaldi, Brave, Safari, IE, Edge)

Должно быть, где-то есть что-то такое, чего я сейчас просто не вижу (надеюсь, туннельное зрение). Я также заметил, что несколько классов bootstrap: col-это, col-то, в некоторых разделах также дают проблемы (раньше они этого не делали). Это должно быть что-то, что я сделал или не сделал после изменения ClientIDMode, потому что это было не так.

Теперь я знаю, что должен не искать странные вещи, а просмотреть всю ситуацию Id (и ViewStateMode, с которым я тоже возился).

Спасибо за вашу проницательность. Хорошего вам уик-энда.

Ваше здоровье!

ZurdoDev

Вам нужно использовать элементы управления браузером, отладить его и выяснить, что происходит.

alexvw

Привет Зурдодев,

У меня есть; но я не могу точно определить проблему; как уже объяснялось ранее, "...нажатия клавиш работают так, как ожидалось, но не мышь. Я реализовал javascript, чтобы позволить навигацию с помощью клавиш со стрелками, нажав Enter, Tab, и все они работают просто отлично."

Проблема остается; мышь, кажется, становится "неактивной", заставляя щелчок "повторно включить" ее.

Спасибо за Ваш вклад.

1 Ответов

Рейтинг:
2

alexvw

Привет,

Благодаря вкладу, предложенному обоими: Винсент Маверик Дюрано, и Зурдодев- Я нашел корень проблемы!

Это был тег div внутри updatepanel (Vicent, вы правы, они "злые"), который просто решил игнорировать метод Update (), вызываемый из кода.

divClickOut.Visible = false;
UpdPnlBackDrop.Update();
Поскольку div прозрачен, а не влияет на вкладку и т. д. клавиши навигации, его присутствие не было очевидным.

С другой стороны, как и предполагал Зурдодев, я действительно использовал инструмент отладки браузера (опять же) для проверки скриптов, html и т. д., но упустил из виду простой, но эффективный щелкните правой кнопкой мыши => "проверить элемент" вариант.

Эти идеи позволили мне обнаружить проблему этого "странного поведения"; теперь я займусь ее исправлением.

Спасибо вам, ребята.


Vincent Maverick Durano

Это отличная новость! Рад, что вы это поняли :). Я дам вам 5 баллов за публикацию вашего решения для дальнейшего использования. :)