Мне было интересно, если кто-то может назначить меня в моей проблеме.Извините, это будет немного долго, но я хочу убедиться, что у меня есть все подробности, поскольку некоторым из них, возможно, придется что-то делать с этой проблемой.
Вот моя ситуация: у меня есть страница,который обернут в UpdatePanel, у которого есть дерево.После выбора элемента в дереве я загружаю пользовательский элемент управления.В пользовательском элементе управления есть элемент div, который я использую в качестве диалогового окна пользовательского интерфейса JQuery:
<div id="MyJQueryDialogDiv" title="My Title" runat="server">
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ShowDialogButton" EventName="Click" />
</Triggers>
<ContentTemplate>
<table width="20%">
<tr>
<td>my stuff here</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
</div>
У меня есть кнопка ASP.NET на форме вне этой UpdatePanel (UpdatePanel1), которая при нажатии вкод позади вызывает System.Web.UI.ScriptManager.RegisterClientScriptBlock () с вызовом этой функции javascript: function openModalDiv () {alert ('Open');$ ('# MyJQueryDialogDiv'). Диалоговое окно ({autoOpen: true, bgiframe: false, показать: 'Transfer', скрыть: 'Transfer', модальное: true
});.. $ ( '# MyJQueryDialogDiv') родитель () appendTo ($ ( "форма: первая"));$ ( '# MyJQueryDialogDiv') диалог ( 'открыто').}
Я также устанавливаю переменную в состоянии просмотра при нажатии кнопки ShowDialogButton.Это используется, чтобы держать диалог открытым, если диалог отправляет назад.Код выглядит примерно так:
protected override void OnPreRender(EventArgs e)
{
if (IsDialogOpen())
ShowDialogBox(); //ShowDialogBox is the same function that ShowDialogButton calls
}
Проблема, с которой я столкнулся, заключается в следующем: если я удаляю UpdatePanel (UpdatePanel1), все работает, за исключением того, что страница полностью отправляется обратно.Мои элементы внутри div (где «мои вещи здесь») отправляются обратно правильно, и все обновляется правильно.Если у меня есть UpdatePanel (UpdatePanel1), то при первом нажатии пользователем ShowDialogButton всплывающее окно отображается.Если я снова отправлю сообщение из этого всплывающего окна (когда я нажимаю на кнопки / etc, которые находятся внутри div), новое всплывающее окно отображается в дополнение к старому, которое отображается.При третьем обратном ответе оттуда я получаю неверный аргумент обратного вызова или обратного вызова в ASP.NET.
Мне интересно, почему JQuery создает второе всплывающее окно?Я считаю, что недопустимый аргумент обратной передачи или обратного вызова вызван тем, что я отправляю сообщения из элемента управления, который не зарегистрирован для обратной передачи в ASP.NET.Это может быть дополнительное всплывающее окно, созданное JQuery.Кто-нибудь сталкивался с подобными проблемами?
Кроме того, что касается функций JavaScript для открытия всплывающего окна (modelOpenDiv), у меня в начале была функция setupModalDiv (), которая была чем-то похожим на это:
function setupModalDiv(div) {
alert('Open');
$('#MyJQueryDialogDiv').dialog({
autoOpen: false,
bgiframe: false,
show: 'Transfer',
hide: 'Transfer',
modal: true,
open: function(event, ui) { $(this).parent().appendTo($("form:first")); }
});
}
I would call this to register the div when the user control first loaded (in other words, not posting back). Afterwards when the user clicked the button I would call a javascript function:
function openModalDiv(div) {
$('#divname').dialog('open');
}
Это вообще не отображало диалог.Я решил, что должен вызывать все это (не только $ ('# divname'). Dialog ('open');), когда я хочу, чтобы диалог открывался.
Ключ здесь в том, что когда я удаляюUpdatePanel все это работает, но делает полный постбэк, даже если он находится внутри родительского UpdatePanel (который охватывает всю страницу).Во всяком случае, извините, что это так долго, но я был бы признателен, если кто-нибудь может что-то предложить.
Спасибо, Майк