Проблема
Из моего прочтения, здесь и в других местах, по-видимому, пользовательский интерфейс jQuery (при диалоге инициализации) перемещает ваш элемент диалога (вместе с его содержимым) за пределы элемента <form
и присоединяет его к <body
. Предположение заключается в том, что тело всегда присутствует, когда форма отсутствует, и при использовании IE могут быть некоторые преимущества z-порядка.
Проблема в том, что все элементы управления ASP.NET требуются от Microsoft, чтобы они находились на <form
страницы, чтобы участвовать в обратной передаче и работать правильно, независимо от того, являются ли они фактическими элементами управления вводом HTML.
Решение (jQuery 1.4 +) *: программно переместить диалоговое окно внутри HTML-формы:
(Есть другие ответы, подобные этому. Это самый короткий из всех, что я видел, он занимает только одну строку кода и не требует изменения исходного кода jQuery.)
С jQuery UI 1.8.7 (Stable, для jQuery 1.3.2+) мне удалось добиться того, чтобы элементы управления ASP.NET поддерживали поведение PostBack с помощью следующего «трюка» , полученного из этой ветки форума :
// As is customary, call $mydialog.dialog(..) to initialize it.
// Init all your dialog boxes before continuing.
// After init, TYPE THIS LINE to move all dialog boxes back into the form element
$('.ui-dialog').detach().appendTo('form');
Чтобы указать только одно диалоговое окно с исправлением, используйте эту строку вместо:
$mydialog.closest('.ui-dialog').detach().appendTo('form');
где $ mydialog - это ссылка на ваш элемент диалога с помощью селектора jQuery -e.g. $('#mydiv')
.
Причина, по которой используется класс .ui-dialog
, заключается в том, что пользовательский интерфейс jQuery оборачивает ваш элемент диалога во внешний div с именем класса ui-dialog , который всегда находится на самом внешнем элементе диалога и является уникальным среди всех других имен классов, используемых в диалоге. Это означает, что ваш фактический диалог состоит не только из HTML-элемента, который вы указали для него, и вам нужно воздействовать на весь диалог.
После инициализации диалога jQuery перемещает построенный диалог за пределы формы HTML.
Вставляя данную строку, вы перемещаете все обратно в форму, делая ASP.NET счастливым.
Метод detach
jQuery вырезает его из DOM, но поддерживает все события jQuery и связанные с ним данные.
(* Поскольку detach
был представлен в jQuery 1.4, это решение ограничено этой версией и выше. Я слышал, что более старые версии jQuery могут достичь ограниченного успеха, используя вместо этого клон и удаление, хотя я не пробовал ит.)
Метод appendTo
jQuery вставляет его в HTML-форму.
Это то, что я понимаю. Надеюсь, это поможет кому-то еще.