Блокировка JQuery и конфликты обратной передачи ASP.NET

Предыстория:

Я использую jquery blockui 2.31 на jquery 1.3.2, на ASP.NET 2.0.

Я использую диалоговое окно, чтобы показать (обычно) скрытый DIV как своего рода всплывающее модальное диалоговое окно с элементами управления на стороне сервера ASP.NET (для простоты, asp:Button). Там нет AJAX, или не гарантируется.

Одна из вещей, которые делает jquery blockui, если вы передаете ему некоторые html-элементы, — это удаление элемента управления с его места на странице и добавление его к body.

Похоже, что ASP.NET 2.0 хочет, чтобы элементы управления, которые отправляются обратно, были в форме, которую вы можете найти с помощью $(#aspnetForm). jquery blockui просто переместил их в тело, поэтому обратная передача никогда не срабатывает.

Этот метод является методом экземпляра и, вероятно, не будет работать как статический (ссылки, зарегистрированные в элементах управления пользователя и страницы...)

Я немного покопался:

Я изменил jquery blockui, чтобы он добавлялся к форме (и боролся с селектором, чтобы удалить блок), но это не работает с IE6 и IE7 - наложение начинается с формы, и весь диалог появляется не по центру. Скрытие оверлея не вариант, и я действительно ненавижу возиться со специфичным для IE css и скриптом, специфичным для IE.

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

Я думаю, что решение заключается в том, чтобы div вызывал скрытый фиктивный якорь для выполнения обратной передачи исходной кнопки. sontek предложил это в своем ответе на связанный с этим вопрос.

Мой актуальный вопрос:

Я на правильном пути с трюком с фальшивой обратной передачей? Я полагаю, что если я полагаюсь на jquery для функциональности модального диалога, мне не следует беспокоиться об отступлении.

Или я должен продолжать возиться со стилем добавления формы?


person Broam    schedule 21.01.2010    source источник
comment
вы можете проверить здесь stackoverflow.com/questions/7929094/jquery -blockui-and-asp-net я не проверял это больше, чем в опере   -  person Peter    schedule 31.10.2011
comment
На это более или менее ответили некоторое время. Мы отказались от этого плагина, так как он не имеет нужного нам поведения.   -  person Broam    schedule 31.10.2011


Ответы (1)


Вы в значительной степени застряли, помещая теги обратно в тег формы, если хотите, чтобы нормальное поведение asp.net, такое как события, срабатывало.

При этом, если вы застряли на использовании модального окна jQuery, я не думаю, что запуск обратной передачи — это так уж плохо. Как вы упомянули из связанного/связанного вопроса, вы можете получить ссылку обратной передачи GetPostBackEventReference в своем коде программной части и передать элемент управления, событие которого вы хотите запустить, например:

//assuming your button is btnMyButton and
Page.ClientScript.GetPostBackEventReference(btnMyButton, null);

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

Не самое элегантное решение, но я думаю, что вы на правильном пути, если вам нужно использовать модальное jQuery.

person KP.    schedule 21.01.2010
comment
Это в значительной степени то, с чем мы должны были пойти. Элементы управления не в форме не передают свое состояние обратно на сервер. Хотя для textarea это достаточно просто, попытка использовать клиентскую часть, чтобы обойти это для asp:FileUpload, — это ужас, о котором я не хочу думать. - person Broam; 25.01.2010