我想从代码隐藏中显示 jQuery UI 对话框,并且需要在回发后刷新它。
该对话框是用于过滤和查找数据的控件。因此,用户从 DropDownLists 中进行选择并在 TextBoxes 中输入文本,单击“Apply-Button”,发生异步回发,数据根据用户的选择进行过滤,结果将显示在 GridView 中。因此我需要更新 GridView 周围的 UpdatePanel。
异步回发在以下链接的帮助下工作:
- 带有 ASP.NET 按钮回发的 jQuery UI 对话框 https://stackoverflow.com/questions/757232/jquery-ui-dialog-with-asp-net-button-postback
- http://blog.roonga.com.au/2009/07/using-jquery-ui-dialog-with-aspnet-and.html http://blog.roonga.com.au/2009/07/using-jquery-ui-dialog-with-aspnet-and.html
(基本上dlg.parent().appendTo(jQuery("form:first"));
-解决方案)
Problem:我无法使用 UpdateMode="Always" 或通过 UpdatePanel.Update() 从代码隐藏手动更新 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)
Update:我还注意到回发值中存在问题。所有文本框(如果为空或未附加逗号)。这表明控件根据以下方式多次呈现:http://www.componentart.com/community/forums/t/60999.aspx http://www.componentart.com/community/forums/t/60999.aspx
我确信这两个问题都是相关的。整个对话框及其所有控件将在每次异步回发中重新创建,因此所有控件名称在 DOM 中多次存在(导致 ViewState 逗号附加问题)。这些控件仅在 FireBug/IE Deveoper 工具栏中可见,而不是在 HTML 源中可见,因此我认为 jQuery 导致了这些问题。我怎么能够dispose对话框或者我怎样才能阻止娱乐活动(检查是否已经存在)对话框?这是因为对话框位于 UpdatePanel 内部还是因为它(通过 Javascript)移动到 UpdatePanel 外部?
在异步回发之前销毁对话框并不能解决问题,因为对话框只会消失:
<asp:Button ID="BtnApplyFilter" OnClientClick="$('#Dialog_ChargeFilter').dialog('destroy');" ... />
非常感谢您的帮助。
Solution:我最终使用了模态弹出扩展器 http://www.asp.net/ajax/ajaxcontroltoolkit/samples/modalpopup/modalpopup.aspx来自 AjaxControlToolkit。在出现一些小问题之后,它的工作方式就像具有异步回发的魅力(不要忘记调用MPE.Show()
在每个代码隐藏函数中(如果您希望弹出窗口保持可见)。如果有人感兴趣,我可以添加更多代码。