Я хочу показать JQuery UI Dialog от Codebehind и мне нужно обновить его после постбэков.
Диалог является элементом управления для фильтрации и поиска данных. Таким образом, пользователь выбирает из DropDownLists и вводит текст в TextBoxes, нажимает кнопку «Применить», происходит асинхронная обратная передача, данные фильтруются в соответствии с выбором пользователя, и результат будет отображаться в GridView. Поэтому мне нужно обновить панель обновления вокруг GridView.
Асинхронная обратная передача работает с помощью следующих ссылок:
(в основном решение dlg.parent().appendTo(jQuery("form:first"));
)
Проблема : я не могу обновить UpdatePanel ни с UpdateMode = "Always", ни вручную из codebehind через UpdatePanel.Update (). Я предполагаю, что это как-то связано с тем, что диалог не находится внутри UpdatePanel или что-то подобное. Надеюсь, кто-нибудь сможет мне помочь.
Некий источник:
function createChargeFilterDialog() {
//setup dialog
$('#Dialog_ChargeFilter').dialog({
modal: true,
resizable: false,
autoOpen: false,
draggable: true,
hide: "Drop",
width: 850,
height: 600,
position: "center",
title: "Charge-Filter",
buttons: {
"Close": function () {
$(this).dialog("close");
}
},
open: function (type, data) {
$(this).parent().appendTo(jQuery("form:first"))
},
close: function (type, data) {
}
});
}
Он вызывается из codebehind, когда BtnShowDialog (вне jQuery-Dialog) щелкается по
AjaxControlToolkit.ToolkitScriptManager.RegisterStartupScript _
(Me.Page, GetType(Page), "showChargeFilterDialog", "createChargeFilterDialog();$('#Dialog_ChargeFilter').dialog('open');", True)
Обновление : я также заметил проблему в значениях обратной передачи. Все текстовые поля, если они пустые или нет, имеют запятую. Это означает, что элементы управления отображаются несколько раз в соответствии с: http://www.componentart.com/community/forums/t/60999.aspx
Я уверен, что оба вопроса связаны. Весь диалог со всеми его элементами управления будет воссоздан при каждой асинхронной обратной передаче, следовательно, все имена элементов управления существуют несколько раз в DOM (вызывая проблему с добавлением запятой в ViewState). Элементы управления видны только в панели инструментов FireBug / IE Deveoper, а не в HTML-источнике, поэтому я предполагаю, что jQuery вызывает эти проблемы. Как я могу утилизировать диалог или как я может предотвратить воссоздание (проверьте, если он уже существует) диалога? Это потому, что диалог находится внутри UpdatePanel или потому что он перемещен (через Javascript) за пределы UpdatePanel?
Уничтожение диалога перед асинхронной обратной передачей не решит проблему, потому что диалог просто исчезнет:
<asp:Button ID="BtnApplyFilter" OnClientClick="$('#Dialog_ChargeFilter').dialog('destroy');" ... />
Ваша помощь очень ценится.
Решение : я закончил с использованием ModalPopupExtender из AjaxControlToolkit. После некоторых небольших проблем он работает как шарм с асинхронными обратными вызовами (не забывайте вызывать MPE.Show()
в каждой функции code-behind, если вы хотите, чтобы всплывающее окно оставалось видимым). Я мог бы добавить больше кода, если кому-то интересно.