我想知道是否有人可以指派我解决我遇到的问题 . 对不起,这将有点长,但我想确保我在那里获得所有细节,因为他们中的一些可能必须对此问题做一些事情 .
这是我的情况:我有一个页面,它包含在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内(它包含整个页面) . 无论如何,对不起,这太长了,但如果有人能提出建议,我将不胜感激 .
谢谢你迈克