我正在尝试使用简单的jquery-ui模式对话框作为ASP.NET C#应用程序中的删除确认。我以前做了很多次,但由于某种原因,在这个应用程序中它是行为不端。我看到对话框弹出然后它立即消失,然后我点击“是”或“否”。这是相关代码(Javascript):
<script type="text/javascript" src="/resources/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="/resources/jquery-ui-1.9.1.custom.min.js"></script>
<link rel="stylesheet" type="text/css" href="/resources/ui-lightness/jquery-ui-1.9.1.custom.css" />
<script type="text/javascript">
var remConfirmed = false;
function ConfirmRemoveDialog(obj, title, dialogText) {
if (!remConfirmed) {
//add the dialog div to the page
$('body').append(String.Format("<div id='confirmRemoveDialog' title='{0}'><p>{1}</p></div>", title, dialogText));
//create the dialog
$('#confirmRemoveDialog').dialog({
modal: true,
resizable: false,
draggable: false,
close: function(event, ui) {
$('body').find('#confirmRemoveDialog').remove();
},
buttons:
{
'Yes, remove it': function() {
$(this).dialog('close');
remConfirmed = true;
if (obj) obj.click();
},
'No, keep it': function() {
$(this).dialog('close');
}
}
});
}
return remConfirmed;
}
//String.Format function (since Javascript doesn't have one built-in
String.Format = function() {
var s = arguments[0];
for (var i = 0; i < arguments.length - 1; i++) {
var reg = new RegExp("\\{" + i + "\\}", "gm");
s = s.replace(reg, arguments[i + 1]);
}
return s;
}
</script>
这是我使用确认功能的地方(在<asp:Button>
控件的OnClientClick中):
<asp:Button ID="btnRemoveProgram" runat="server" Text="Remove" CausesValidation="false" OnClientClick="ConfirmRemoveDialog(this, 'Please confirm removal', 'Are you sure you wish to remove the selected Program? This cannot be undone.');" />
正如我所说,我之前已成功使用过相同的构造(几乎完全相同的代码);我不知道为什么它现在不起作用。任何想法都会受到高度赞赏,我真的很难过这个。
答案 0 :(得分:2)
runat="server"
告诉按钮它应该回发以在服务器上执行事件。 OnClientClick
将在客户端之前执行,因此您将看到对话框,然后立即发布页面帖子,导致对话框消失。
问题是你的模态对话框在传统的窗口意义上不是模态的。 javascript继续。最简单的测试是在你返回之前添加一个警报,你会看到它在对话框显示后立即弹出。
要解决此问题,return false
始终在OnContentClick中,然后在您的是/否按钮事件处理程序中使用__doPostback
javascript method。
答案 1 :(得分:1)
你需要return
remConfirmed到调用者,这是按钮本身。在按钮上,执行以下操作:
OnClientClick="return ConfirmRemoveDialog(/* the rest of the code */);"