【问题标题】:ASP.NET how to disable button on submit?ASP.NET 如何禁用提交按钮?
【发布时间】:2026-01-10 09:30:01
【问题描述】:

我在 ASP.NET 站点中有付款表单,当用户单击 asp:Button 时,有时他提交了几次。我想在不损害当前 ASP.NET 站点的情况下禁用此功能(我的意思是没有花哨的 jQuery,除非它非常基本并且不会干扰 ASP.NET 内置验证)

谢谢!!!

【问题讨论】:

  • 您希望在第一次点击后始终禁用它吗?
  • @Samiksha,我需要在表单提交后禁用,因为如果我在第一次单击后禁用它,一旦我单击以使用 ASP.NET 验证来验证数据,它就会被禁用。
  • 我已经更新了我的答案,请立即查看。您需要做什么,在禁用按钮之前,您需要检查 Page_ClientValidate()

标签: asp.net jquery javascript


【解决方案1】:

您可以在客户端的按钮上轻松执行此操作:

onClientClick="this.disabled=true;"

您也可以使用 Muhammad 的方法:

onClientClick="if(Page_ClientValidate()){this.disabled=true;}"

如果这仍然不起作用,您可以在禁用按钮之前自己启动回发:

onClientClick="if(Page_ClientValidate()){__doPostBack;this.disabled=true;}"

【讨论】:

  • @Oded,在进行 ASP.NET 验证后无法在 Chrome 中工作。
  • @eugeneK - “不起作用”不是很有描述性。什么不起作用?
  • @Oded,验证后按钮不点击
  • @eugeneK - 和其他浏览器?
  • @Andreas Niedermair - 你在哪里看到这是 xhtml?
【解决方案2】:
onClientClick="if(Page_ClientValidate()){__doPostBack;this.disabled=true;}" 
UseSubmitBehavior="false" 

【讨论】:

    【解决方案3】:

    创建一个静态方法:

    /// <summary>
    /// Disable the button on submit. Remember to set up the validationGroup property if there is more than one form/submit
    /// </summary>
    /// <param name="objButton">The submit button object</param>
    public static void disableSubmitButton(Button objButton)
    {
        objButton.CausesValidation = false;
        string validationGroup = objButton.ValidationGroup;
        if (string.IsNullOrEmpty(validationGroup))
            objButton.Attributes.Add("onclick", "if (Page_ClientValidate()) {this.value=\"Processing...\";this.disabled=true;" + objButton.Page.ClientScript.GetPostBackEventReference(objButton, "").ToString() + "}");
        else
            objButton.Attributes.Add("onclick", "if (Page_ClientValidate(\"" + validationGroup + "\")) {this.value=\"Processing...\";this.disabled=true;" + objButton.Page.ClientScript.GetPostBackEventReference(objButton, "").ToString() + "}");
    }
    

    创建一个表单并在表单中放置一个按钮(如果有多个表单/提交,请记住设置validationGroup属性):

    <asp:Button runat="server" ID="btnSubmit" OnClick="btnSubmit_Click" />
    

    在页面加载时调用它:

    CommonFunctions.disableSubmitButton(btnSubmit);
    

    【讨论】:

      【解决方案4】:

      我知道这是一个老问题,但在某些情况下所有答案都失败了。主要是您可能会在浏览器中收到“Page_ClientValidate is not defined”错误。

      这种方法确实有效:

      public static void DisableSubmitButton(Button button)
      {
          button.Attributes.Add("onclick", "this.disabled=true;" + button.Page.ClientScript.GetPostBackEventReference(button, String.Empty));
      }
      

      【讨论】:

      • 其他答案在我的情况下都不起作用,但这没问题。谢谢。
      【解决方案5】:

      您可能会选择blockUI。 真的很好,因为它阻止了整个用户界面,而不仅仅是按钮 - 这样用户就不能点击另一个按钮(例如,你想保存......需要一些时间......同时用户点击删除)

      【讨论】:

      • 这种方法的问题是。 ASP:Button 做了两件事。 1.JS 验证使用 ASP.NET Validators。 2.Triggering OnClick="" 这个脚本可以在客户端执行,所以会导致JS验证失败。
      • 1.我不认为这会是个问题。您可以重新定义客户端验证功能并在验证正常后执行阻塞。 2.看在上帝的份上,你怎么能在客户端触发服务器事件?摘要:您应该提供更多信息和一些代码(代码隐藏和标记和最终 html)。
      • 顺便说一句 - 还有另一种方法:为什么不重新定义表单的提交处理程序。如果表单由最后一个实例提交(例如您的客户端验证),您可以阻止 ui,不是吗?
      • 我不熟悉一旦验证就会触发的 ClientValidation 方法
      • 那么我建议,为表单提交实现您自己的事件处理程序。如果单击任何按钮并且任何验证成功,就会发生这种情况。
      最近更新 更多