【问题标题】:ASP.NET Click() event doesn't fire on second postbackASP.NET Click() 事件不会在第二次回发时触发
【发布时间】:2010-10-31 11:39:42
【问题描述】:

我有一个 ASP.NET 网络表单。第一次提交表单时,会引发 SubmitButton_Click 事件。

表单返回给浏览器时要么带有验证错误,要么带有再次提交带有新值的表单的选项。

当再次提交表单时,SubmitButton_Click 事件永远不会触发。 Page_Load 会触发,但不会触发按钮。

有人知道为什么我会在服务器端看到这种行为吗?

(我正在使用 jQuery 和验证控制客户端,但我认为这不会导致问题。我想我还是会提到它)。

编辑:

<asp:Button ID="SubmitButton" OnClick="SubmitButton_Click"
      runat="server" />

事件是在控件上设置的,而不是在代码中。

【问题讨论】:

  • 代码会有所帮助。尤其是你如何连接你的事件处理程序。

标签: asp.net events postback


【解决方案1】:

如果您没有在页面生命周期中足够早地创建它们,动态创建的控件可能会发生这种情况。你有点缺乏细节,但你的按钮是动态创建的吗?

【讨论】:

    【解决方案2】:

    JQuery 是否提交表单?如果__doPostBack() 没有在客户端调用(有适当的争论),服务器端事件将不会发生。

    【讨论】:

    • 当 Page_Load 触发时,表单仍在发送到服务器。这就是我觉得奇怪的地方。
    • Page_Load() 每当页面因任何原因被加载时都会被触发,所以这并不排除我的建议。如果你能排除我的建议,@Joel Coehoorn 和@nikmd23 也有重要的事情要看。
    • 我想这可能是正在发生的事情。验证例程似乎在调用 __doPostBack() 之前提交表单。
    【解决方案3】:

    你是如何“连接”你的事件处理程序的?

    听起来您正在将其连接到 if(IsPostback) 块中,该块没有第二次运行...

    【讨论】:

    • 打败我!我认为您的意思是 if (!IsPostBack) :-)
    【解决方案4】:

    Click 事件处理程序是如何与提交按钮关联的?以声明方式还是在代码中?

    如果它在代码中,请确保您没有在这样的块中执行它:

    if (!Page.IsPostBack) {
        submitButton.Click += new EventHandler(submitButton_Click);
    }
    

    这将防止在回发页面时附加事件处理程序(即Page.IsPostBacktrue)。

    【讨论】:

      猜你喜欢
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      相关资源
      最近更新 更多