在我当前的项目中,我有一个工作流程,我需要向用户显示两个连续的 MessageBox。第一个更像是一个警告,通知用户他尝试执行的操作的风险。我正在使用ClientClickEvent
链接按钮让用户确认操作:
<asp:LinkButton runat="server" id="lockorder"
CommandName='LockOrder'
OnClientClick="return confirm('Do you really want to lock this order?');" />
如果用户确认他确定要执行该操作,则应用程序会从后面的代码中执行一些验证。结果可能是,有一些未处理的任务。这是有效的,但用户应该了解它,以便有可能完成这些任务。所以我显示了第二个确认对话框,但这次来自后面的代码:
if (tasksOpen)
{
ScriptManager.RegisterClientScriptBlock(
this.Page,
typeof(Page),
"Onload",
"var confirmationResult = window.confirm('There are some open tasks left, which might get closed. Do you really want to lock this order?'); if (confirmationResult) __doPostBack('ConfirmLockOrder', confirmationResult);",
true);
return;
}
为了更好的可读性,这里是交给客户端的 JS 片段:
var confirmationResult
= window.confirm('There are some open tasks left, which might get closed. Do you really want to lock this order?');
if (confirmationResult)
__doPostBack('ConfirmLockOrder', confirmationResult);
再次回到后面的代码中,我收到了这个命令(例如在Page_Load
事件中)并继续实际操作。一切正常,但我做了一些改变,它停止执行回发。
我查看了使用 FireBug 的客户端脚本。-function __doPostBack
(显然是自动生成的)告诉我WebForm_OnSubmit
没有定义。我认为它没有定义,因为确认对话框显示在OnLoad
-event 中,因此在实际加载表单之前。但是为什么__doPostBack
-function 甚至需要检查这个事件是否执行,如果它没有定义呢?我可以自定义__doPostBack
-behaviour 吗?还是我应该选择其他活动?还是我在这里完全错了?
我希望有人能指出我正确的方向!