我正在创建一个页面,我在其中创建了Javascript弹出窗口,在回发时提供了确认脚本,例如我在页面加载中有这个
DotNetNuke.Framework.jQuery.RequestDnnPluginsRegistration();
string eventTarget = (this.Request["__EVENTTARGET"] == null) ? string.Empty : this.Request["__EVENTTARGET"];
string eventArgument = (this.Request["__EVENTARGUMENT"] == null) ? string.Empty : this.Request["__EVENTARGUMENT"];
cancelSelected = btnCancel_Click_Confirmed(eventTarget, eventArgument);
并且此方法要求取消选择
protected const string cancelScriptKey = "CancelScript";
protected void Cancel_Click(object sender, EventArgs e)
{
Page.ClientScript.RegisterStartupScript(this.GetType(), cancelScriptKey, CoachTeamRegister.BuildConfirmScript("Are you sure you want to cancel?\nAll unsaved changes would be lost?", cancelScriptKey), true);
}
在这种情况下,这是有效的,因为我可以使用PageLoad中的变量cancelSelected
完成操作稍后在代码中虽然我需要在方法内部执行此过程而不会回发,直到方法完成。有没有办法创建一个确认对话框并从选择中接收布尔值而不回发?
我能找到的最近的是Can I stop a post back by using javascripts confirm?,它讨论了我已经知道如何使用的页面上的静态按钮,客户想要一个特定情境的对话框
答案 0 :(得分:0)
我知道阻止执行的唯一方法是使用默认确认,它将阻止执行,直到从对话框收到结果。使用像JQuery这样的自定义对话框时不是这种情况。实现这一目标的一种解决方法是使用__DoPostBack
或document.getElementById('btnId').click();
假设您的标记中有此按钮
<asp:button id="btnSave" runat="server" OnClick="btnSave_Click"/>
根据结果调用服务器端事件。
<script>
$(function() {
$( "#dialog-confirm" ).dialog({
resizable: false,
height:140,
modal: true,
buttons: {
"Save": function() {
$( this ).dialog( "close" );
//Save was clicked. Call the server side event.
document.getElementById('btnSave clientId').click();
//Or alternatively __DoPostBack('btnSave clientId','');
},
Cancel: function() {
$( this ).dialog( "close" );
//Show message for the user if needed.
}
}
});
});
</script>