我想知道是否有人可以指派我处理我遇到的问题。对不起,这将有点长,但我想确保我在那里获得所有细节,因为他们中的一些可能必须对此问题采取措施。
这是我的情况: 我有一个页面,它包含在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')对话框( '开放')。 }
单击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(包含整个页面)内。 无论如何,对不起,这太长了,但如果有人能提出建议,我将不胜感激。
谢谢你 麦克