【问题标题】:Disable the asp button on click of the same button till the process ends单击同一按钮时禁用 asp 按钮,直到进程结束
【发布时间】:2011-01-31 14:29:15
【问题描述】:

我有以下场景:

点击 aspx 页面中的 SAVE 按钮,会进行一些处理。处理时间可以为 10-15 分钟。我想禁用 SAVE 按钮直到进程结束,一旦进程完成,应该启用 SAVE 按钮。

我尝试了以下方法但无法解决问题:

1) 客户端脚本:

我在客户端单击按钮时调用了 JavaScript,并将禁用属性设置为 true。但是,由于禁用了客户端的按钮,因此未调用服务器端的 saveButton_Click 事件。

2) 在服务器端的 saveButton_Click 方法中禁用:

在这种情况下,由于已经调用了saveButton_Click并且请求被发送到服务器,所以客户端在处理请求之前没有任何区别。

【问题讨论】:

    标签: c# asp.net events button


    【解决方案1】:

    您说:“1)客户端脚本:我在按钮的客户端单击上调用了一个 java 脚本并将禁用属性设置为 true。但是,由于禁用了客户端上的按钮,因此未调用服务器端 saveButton_Click 事件。 "这意味着该按钮现在已禁用,并且在您重新启用该按钮之前不会处理对服务器端的调用。那么它不符合您的要求吗?

    【讨论】:

      【解决方案2】:

      在您的按钮单击中使用System.Threading.Thread.Sleep(5000) 并将其禁用...

      参考Disable submit button

      【讨论】:

        【解决方案3】:

        您可以使用虚拟提交按钮:

        <%@ Page Language="C#" AutoEventWireup="true" %>
        <script type="text/C#" runat="server">
            protected void BtnClick(object sender, EventArgs e)
            {
                System.Threading.Thread.Sleep(2000);
                result.Text = DateTime.Now.ToLongTimeString();
            }
        </script>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        
        <html xmlns="http://www.w3.org/1999/xhtml" >
        <head runat="server">
            <title></title>
        </head>
        <body>
            <form id="form1" runat="server">
            <button type="button" onclick="this.disabled='disabled';document.getElementById('<%= btn.ClientID %>').click();">Start processing</button>
            <asp:Button ID="btn" runat="server" OnClick="BtnClick" style="display:none;" />
            <asp:Label ID="result" runat="server" />
            </form>
        </body>
        </html>
        

        【讨论】:

        【解决方案4】:

        不要禁用按钮。正如你所说,它不会触发服务器端事件。或者,您可以隐藏按钮并显示一些适当的消息(如“处理中..”、“工作中..”)。这将提供漂亮的界面。并且你会给出disabling button on postback and enabling the button after postback的效果。

        【讨论】:

          【解决方案5】:

          你可以简单地通过这个代码来处理它。假设这里有一个名为btnAdd的按钮。当你点击这个按钮时,它会因为执行它的相应代码而被禁用。我的意思是由于回发它会被禁用。

          if (!IsPostBack)
              {
               btnAdd.Attributes.Add("onclick", "this.disabled=true;" + GetPostBackEventReference(btnAdd).ToString());
              }
          

          【讨论】:

            【解决方案6】:

            在按钮标记中设置 OnClientClick 和 UseSubmitBehavior

             OnClientClick="this.disabled = true; this.value = 'Submitting...';" UseSubmitBehavior="false"
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2023-03-28
              • 2022-12-20
              • 2020-04-25
              • 2023-03-08
              • 1970-01-01
              • 1970-01-01
              • 2012-04-07
              相关资源
              最近更新 更多