【问题标题】:ASP.Net button click event not firingASP.Net 按钮单击事件未触发
【发布时间】:2010-10-21 15:37:46
【问题描述】:

这可能与this question有关,但我有更多信息。

在使用 Linq 编写了一些新代码后,我最近将一个 ASP.Net 应用程序更新为 .NET 3.5。现在我的页面间歇性地停止触发事件处理程序。我将其范围缩小到带有 Ajax 的页面,并且我认为是 ScriptManager 或 AjaxControlToolkit 注册导致了问题。

真正棘手的部分是页面似乎在大约 2/3 秒的时间内可以正常工作,而控件只有 1/3 的时间会丢失其事件处理程序。我想知道发生了某种类型的错误并且页面未正确呈现,但我找不到这方面的证据。

【问题讨论】:

  • 您是否在这些 AJAX 页面上使用更新面板?
  • 其中一些,是的,但不是全部。

标签: asp.net .net-3.5 asp.net-ajax ajaxcontroltoolkit


【解决方案1】:

我们确实遇到了这个问题,正如您所说,它仅在某些时候发生,并且仅在具有 Ajax 请求的页面上发生。我们发现按照答案中的建议禁用 HTTP Keep-Alive Why does Internet Explorer not send HTTP post body on Ajax call after failure? 工作。

这可以按照How to configure HTTP KEEP-ALIVE in IIS 7中的说明在IIS7中完成

【讨论】:

    【解决方案2】:

    到目前为止,我只使用过 Telerik Ajax 控件,我的观察是,如果在启用 Ajax 的控件中发生异常,则不会发生任何事情。无异常报告,无操作。什么都没有。

    也许您应该在没有 ajax 的情况下测试您的应用程序以找出任何问题点

    【讨论】:

    • 没有错误——如果我删除 AJAX 片段,一切正常。就像我提到的那样,大约 66% 的时间它按原样正常工作,而 Ajax 库仍在标记中。
    【解决方案3】:

    我最初的想法是 javascript 出错(未捕获)并中止异步回发。

    如果您可以在开发环境中实现这一点,您可能想尝试错误处理window.onerror 事件并抛出一些警告框。查看可能发生错误的位置可能会有所帮助。

    【讨论】:

      【解决方案4】:

      你试过了吗:

      ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(yourButton);

      【讨论】:

        【解决方案5】:

        在我看来,更新面板有问题。

        如果您使用多个更新面板并且更新一个面板会更改其他更新面板的数据,请定义更新面板的以下属性。

        对于更新面板

        1. ChildrenAsTriggers = true
        2. EnableViewState = true(如果您正在使用此功能)
        3. UpdateMode = 始终

        对同一页面中的其他更新面板使用相同的属性。

        如果您觉得有用,请将其标记为您的答案,否则请告诉我......

        【讨论】:

          【解决方案6】:

          尝试注释掉更新面板(如果有)。然后尝试单击按钮,页面上一定有错误。我也遇到过类似的问题。

          【讨论】:

            【解决方案7】:

            在我的情况下,没有任何事件(按钮或复选框)被触发。我能够通过以下方式克服这个问题。

            在我的母版页中,我使用 /> 符号而不是 <script></script> 关闭了一个引用外部 .js 文件的标记。

            例如:将 <script src='../../Scripts/common/menu.Js' type='text/javascript' /> 更改为 <script src='../../Scripts/common/menu.Js' type='text/javascript' ></script>

            希望对你有帮助, 拉梅什

            【讨论】: