ASP.NET UpdatePanel JQuery UI Диалог проблема - PullRequest
0 голосов
/ 22 марта 2012

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

Вот моя ситуация: у меня есть страница,который обернут в 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 (который охватывает всю страницу).Во всяком случае, извините, что это так долго, но я был бы признателен, если кто-нибудь может что-то предложить.

Спасибо, Майк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...