WebForm_OnSubmit如何被定义?

本文关键字:定义 OnSubmit WebForm | 更新日期: 2023-09-27 18:13:36

在我当前的项目中,我有一个工作流,我需要向用户显示两个连续的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的客户端脚本。__doPostBack -函数(显然是自动生成的)告诉我WebForm_OnSubmit没有定义。我认为这是没有定义的,因为确认对话框得到显示在OnLoad -事件,因此在表单实际加载之前。但是,如果没有定义,为什么__doPostBack函数甚至需要检查是否执行了此事件?我可以自定义__doPostBack行为吗?还是我应该选择另一个活动?还是我完全错了?

我希望有人能给我指出正确的方向。

WebForm_OnSubmit如何被定义?

基于错误(和一些有根据的猜测),您通过ScriptManager注册的JavaScript代码在ASP生成的其余JavaScript代码之前触发。. NET已加载。因此,WebForm_OnLoad没有定义。

你需要确保网页在你的代码执行之前被完全加载。将代码更改为以下内容:

window.onload=function(){
    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);
}

*我将确认字符串分成两个,只是为了显示的目的。

如果您使用jQuery, $(document).ready优先于window.onload