我想知道是否有人可以指派我解决我遇到的问题 . 对不起,这将有点长,但我想确保我在那里获得所有细节,因为他们中的一些可能必须对此问题做一些事情 .

这是我的情况:我有一个页面,它包含在UpdatePanel中,有一棵树 . 一旦选择了树上的项目,我就加载一个用户控件 . 用户控件上有一个div,我用它作为JQuery UI对话框:

<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') . dialog({autoOpen:true,bgiframe:false,show:'Transfer',hide:'Transfer',modal:true
}); $('#MyJQueryDialogDiv') . parent() . appendTo($("form:first")); $('#MyJQueryDialogDiv') . dialog('open'); }

单击ShowDialogButton时,我还在视图状态中设置了一个变量 . 这用于在对话框回发时保持对话框打开 . 代码是这样的:

protected override void OnPreRender(EventArgs e) 
{
  if (IsDialogOpen())
   ShowDialogBox();   //ShowDialogBox is the same function that ShowDialogButton calls   
}

我遇到的问题是:如果我删除UpdatePanel(UpdatePanel1),除了页面完全回发之外,一切正常 . 我在div中的项目(“我的东西在这里”)正确地回发并且事情得到正确更新 . 如果我有UpdatePanel(UpdatePanel1),那么当用户第一次单击ShowDialogButton时,弹出窗口就会出现 . 如果我再次从该弹出窗口回发(当我点击div中的按钮/ etc时),除了显示的旧弹出窗口之外,还会显示一个新的弹出窗口 . 在那里的第三个回发我得到一个无效的回发或回调参数ASP.NET错误 .

我想知道为什么JQuery会创建第二个弹出窗口?我相信无效的回发或回调参数是因为我从未注册到ASP.NET中的回发的控件回发 . 这可能是JQuery创建的额外弹出窗口 . 有人遇到过类似的问题吗?

另外,对于打开弹出窗口(modelOpenDiv)的javascript函数,我在开头做了一个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内(它包含整个页面) . 无论如何,对不起,这太长了,但如果有人能提出建议,我将不胜感激 .

谢谢你迈克