ASP.NET UpdatePanel JQuery UI对话问题

时间:2012-03-22 17:37:34

标签: jquery asp.net jquery-ui updatepanel

我想知道是否有人可以指派我处理我遇到的问题。对不起,这将有点长,但我想确保我在那里获得所有细节,因为他们中的一些可能必须对此问题采取措施。

这是我的情况:   我有一个页面,它包含在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>  

我在这个UpdatePanel(UpdatePanel1)之外的窗体上有一个ASP.NET按钮,在单击后,在后面的代码中调用System.Web.UI.ScriptManager.RegisterClientScriptBlock()并调用此javascript函数:     function openModalDiv(){       警报( '打开');       $( '#MyJQueryDialogDiv')。对话框({         autoOpen:true,         bgiframe:false,         显示:'转移',         隐藏:'转移',         莫代尔:真实的       });       。$( '#MyJQueryDialogDiv')的父()appendTo($( “形式:第一”));       $( '#MyJQueryDialogDiv')对话框( '开放')。     }

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

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

我遇到的问题是:   如果我删除UpdatePanel(UpdatePanel1),一切都有效,除了页面完全回发。我在div中的项目(“我的东西在这里”)正确地回发并且事情得到正确更新。   如果我有UpdatePanel(UpdatePanel1),那么当用户第一次单击ShowDialogBu​​tton时,弹出窗口就会出现。如果我再次从该弹出窗口回发(当我点击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(包含整个页面)内。 无论如何,对不起,这太长了,但如果有人能提出建议,我将不胜感激。

谢谢你 麦克

0 个答案:

没有答案