我想在Codebehind中显示一个jQuery UI对话框,并需要在后续请求后刷新它。
该对话框是一个控件,用于过滤和查找数据。因此,用户从DropDownLists中选择并在TextBoxes中输入文本,单击“应用”按钮后会进行异步后台处理,根据用户的选择进行数据过滤,结果将在GridView中显示出来。因此,我需要更新围绕GridView的UpdatePanel。
异步后台处理通过以下链接实现:
- jQuery UI Dialog with ASP.NET button postback
- http://blog.roonga.com.au/2009/07/using-jquery-ui-dialog-with-aspnet-and.html
(基本上是dlg.parent().appendTo(jQuery("form:first"));
解决方案)
问题:我无法使用UpdateMode="Always"或通过UpdatePanel.Update()从Codebehind手动更新UpdatePanel。我认为这可能与对话框不在UpdatePanel内部或类似的事情有关。希望有人能帮助我解决这个问题。
一些源代码:
function createChargeFilterDialog() {
//setup dialog
$('#Dialog_ChargeFilter').dialog({
modal: true,
resizable: false,
autoOpen: false,
draggable: true,
hide: "Drop",
width: 850,
height: 600,
position: "center",
title: "Charge-Filter",
buttons: {
"Close": function () {
$(this).dialog("close");
}
},
open: function (type, data) {
$(this).parent().appendTo(jQuery("form:first"))
},
close: function (type, data) {
}
});
}
当 BtnShowDialog(在 jQuery-Dialog 之外)被点击时,它会从代码后台调用。
AjaxControlToolkit.ToolkitScriptManager.RegisterStartupScript _
(Me.Page, GetType(Page), "showChargeFilterDialog", "createChargeFilterDialog();$('#Dialog_ChargeFilter').dialog('open');", True)
更新: 我还注意到了在postback值中的一个问题。所有的TextBoxes,无论是空还是非空,都附加了一个逗号。这表明控件根据http://www.componentart.com/community/forums/t/60999.aspx被多次呈现。
我确定这两个问题是相关的。每次异步postback都会重新创建带有所有控件的对话框,因此DOM中存在多个控件名称(导致ViewState逗号附加问题)。这些控件只在FireBug/IE Developer Toolbar中可见,而不在HTML源代码中,因此我认为是jQuery引起了这些问题。如何销毁对话框或如何防止重建(检查是否已存在)对话框? 这是因为对话框位于UpdatePanel内还是被移动(通过Javascript)到UpdatePanel外?
在异步postback之前销毁对话框并不能解决问题,因为对话框将简单地消失:
<asp:Button ID="BtnApplyFilter" OnClientClick="$('#Dialog_ChargeFilter').dialog('destroy');" ... />
非常感谢您的帮助。
解决方案: 我最终使用了来自AjaxControlToolkit的ModalPopupExtender。 经过一些小问题,它与异步回发一起正常工作(如果您想让弹出窗口保持可见,请不要忘记在每个代码后端函数中调用MPE.Show()
)。 如果有人感兴趣,我可以添加更多代码。