【问题标题】:How can WebForm_OnSubmit be undefined?WebForm_OnSubmit 怎么可能是未定义的?
【发布时间】:2013-05-15 13:58:23
【问题描述】:

在我当前的项目中,我有一个工作流程,我需要向用户显示两个连续的 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-sn-p:

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-event 中,因此在实际加载表单之前。但是为什么__doPostBack-function 甚至需要检查这个事件是否执行,如果它没有定义呢?我可以自定义__doPostBack-行为吗?还是我应该选择其他活动?还是我完全错了?

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

【问题讨论】:

  • JavaScript 中其他地方的错误可能会产生类似于您在上面遇到的错误。我会先检查一下。定位问题可能很烦人。
  • 没有其他 JavaScript 错误发生...我几乎在所有地方都尽量避免使用 JavaScript,因为我对它不太熟悉...
  • 好的,您的代码可能在其他所有内容加载之前就已运行。我不确定 ScriptManager 注入代码的时间。但是,您可以将 JavaScript 更改为以下内容: window.onload=function(){ [your code here] };如果您使用的是 jQuery,则最好使用 .ready 方法。
  • 感谢您的帮助。我将返回的 JS 代码更改为您所说的。它有效并且对我来说也很有意义,但我仍然不明白我的代码有什么问题。无论如何 - 发布您的解决方案作为答案,我会接受它! :)
  • 很高兴我能提供帮助。我确实喜欢 JavaScript,但它有时真的会让我发疯。

标签: c# asp.net webforms dopostback


【解决方案1】:

根据错误(以及一些有根据的猜测),您通过 ScriptManager 注册的 JavaScript 代码在 ASP.NET 生成的其余 JavaScript 代码加载之前触发。因此,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

【讨论】:

    猜你喜欢
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    相关资源
    最近更新 更多