12

我有一个按钮的以下 onclick 事件。一旦此事件发生,我想禁用该按钮。谁能帮我理解怎么做?

这是我在 buttonclick 事件上执行的代码。

protected void Button3_Click(object sender, EventArgs e)
{

    if (Session["login"] != null && Session["db"] != null)
    {

        digit b = new digit();
        String digitformed = b.formdigit(this.DropDownList1, this.TextBox1, this.TextBox2);

        chekcount c = new chekcount();
        int count = c.getmaxcountforjud_no(digitformed);
        int addtocount = count + 1;

        String name = Session["login"].ToString();
        String databs = Session["db"].ToString();
        String complex_name = name + databs;

        if (DropDownList2.SelectedItem.Text != "New")
        {
            update u = new update();
            u.update1(this.Editor1, digitformed, this.TextBox3, complex_name, name, this.DropDownList2);
            Response.Write(@"<script language='javascript'>alert('Updated')</script>");

        }
        else
        {
            save d = new save();
            d.dosave(this.Editor1, addtocount, digitformed, this.TextBox3, complex_name, name);
            Response.Write(@"<script language='javascript'>alert('Saved')</script>");

        }
    }
    else
    {
        Response.Redirect("log.aspx");
    }
}

这是我要禁用的按钮。

<asp:Button ID="Button3" runat="server" Text="Save" onclick="Button3_Click" 
                    Visible="False" />
4

10 回答 10

32

使用按钮控件的 OnClientClick 和 UseSubmitBehavior 属性。

<asp:Button runat="server" ID="BtnSubmit" 
  OnClientClick="this.disabled = true; this.value = 'Submit in progress...';" 
  UseSubmitBehavior="false" 
  OnClick="BtnSubmit_Click" 
  Text="Click to Submit" />

OnClientClick 允许您添加客户端 OnClick 脚本。在这种情况下,JavaScript 将禁用按钮元素并将其文本值更改为进度消息。回发完成后,新呈现的页面会将按钮恢复到其初始状态,而无需任何额外工作。

在客户端禁用提交按钮的一个陷阱是它将取消浏览器的提交,从而取消回发。将 UseSubmitBehavior 属性设置为 false 会告诉 .NET 注入必要的客户端脚本来触发回发,而不是依赖浏览器的表单提交行为。在这种情况下,它注入的代码将是:

__doPostBack('BtnSubmit','')

重新编写的 HTML:

<input type="button" name="BtnSubmit" 
  onclick="this.disabled = true; this.value = 'Submitting...';__doPostBack('BtnSubmit','')"
  value="Submit Me!" id="BtnSubmit" />

这应该会给你想要的行为。

来自:http ://encosia.com/disable-a-button-control-during-postback/ 来源:Dave Ward(推特:@Encosia)

于 2011-12-12T11:09:33.197 回答
16

你有没有尝试过?:

protected void Button3_Click(object sender, EventArgs e)
{
   Button3.Enabled = false;
   //rest of code
}
于 2011-12-12T11:02:59.667 回答
5
<asp:Button  onclick="Button3_Click" ID="Button3" runat="server" Text="Save"
OnClientClick="this.disabled = true; this.value = 'please wait ..';" 
UseSubmitBehavior="false"     />
于 2011-12-12T11:07:53.107 回答
5

您需要在服务器端代码中设置按钮的 Enabled 属性,如其他海报所详述。但是,如果您试图阻止从同一个按钮多次提交,则需要稍微不同的策略。

在你的类中添加一个方法:

static void DisableButtonDuringPostback(Page page, Button control)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("this.disabled = true;");
    sb.Append(page.ClientScript.GetPostBackEventReference(control, control.ID.ToString()));
    sb.Append(";");

    control.Attributes.Add("onclick", sb.ToString());

}

在 Page_Load 添加

DisableButtonDuringPostback(this.Page, Button3);
于 2011-12-12T11:11:27.130 回答
2

见标记代码

protected void Button3_Click(object sender, EventArgs e)
{

    ** if (Session["Clicked"] == null)
        Session["Clicked"] = true;
    else
    {
        Button3.Enabled = false;
        return;
    } **


    if (Session["login"] != null && Session["db"] != null)
    {

        digit b = new digit();
        String digitformed = b.formdigit(this.DropDownList1, this.TextBox1, this.TextBox2);

        chekcount c = new chekcount();
        int count = c.getmaxcountforjud_no(digitformed);
        int addtocount = count + 1;

        String name = Session["login"].ToString();
        String databs = Session["db"].ToString();
        String complex_name = name + databs;

        if (DropDownList2.SelectedItem.Text != "New")
        {
            update u = new update();
            u.update1(this.Editor1, digitformed, this.TextBox3, complex_name, name, this.DropDownList2);
            Response.Write(@"<script language='javascript'>alert('Updated')</script>");

        }
        else
        {
            save d = new save();
            d.dosave(this.Editor1, addtocount, digitformed, this.TextBox3, complex_name, name);
            Response.Write(@"<script language='javascript'>alert('Saved')</script>");

        }
    }
    else
    {
        Response.Redirect("log.aspx");
    }
}
于 2011-12-12T11:02:52.117 回答
2
   ///count number of button click
    var counter = 0;
    function countclickbutton() {
        counter++;
        if (counter > 1) {
            alert("proessing..please wait.");
//do not allow to again click
            return false;
        }
        else {

            return true;
        }
    }

调用这个 onClientClick 按钮

于 2011-12-12T11:11:01.793 回答
1

如果你想通过使用 jquery 来做到这一点

$('#button3').attr("disabled", true); 
于 2011-12-12T11:04:36.927 回答
0

这是一个旧帖子,但我认为它没有被完全回答。

首先,在 ASP.NET WebForms 中,您向 Web 服务器提交HTTP GET请求,该服务器处理您的请求并输出客户端 HTML 代码供浏览器呈现。

当您与服务器端控件交互时,值包含在VIEWSTATE属性的隐藏输入字段中(例如布尔值Enabled)。

当您单击一个按钮时,它会向HTTP POST同一页面上的 Web 服务器发送一个请求。这就是Page_Load单击按钮时触发事件的原因。

处理完HTTP POST请求后,它将返回 HTML 代码供浏览器重新渲染。因此,如果您的Page_Load活动中有以下代码:

if (Page.IsPostBack) { Button3.Enabled = false; }

HTTP POST在处理请求并返回更新的客户端代码之前,它不会向用户显示它已被禁用。

从最初的问题来看,服务器似乎需要几秒钟才能返回响应,因此当反复单击按钮时可能会触发多个回发事件。

解决您的问题的一种简单(但令人讨厌)的方法是让常规 HTML在 JavaScript 中button执行 a function,它会禁用它并触发服务器端控件的 onclick 事件。这样做的问题是,当HTTP POST请求返回响应时,它会将常规 HTML 呈现button为启用状态。要解决此问题,您可以使用内联 ASP.NET 代码在 JavaScript 中简单地禁用它。这是一个例子:

.ASPX 文件

<button id="clientButton" onclick="javascript:update();" />
<asp:Button ID="serverButton" OnClick="serverButton_OnClick" runat="server" />
<script type="text/javascript">
<% if (Page.IsPostBack) { %>
document.getElementById("clientButton").enabled = false;
<% } %>
function update() {
    document.getElementById("clientButton").enabled = false;
    document.getElementById("<%= serverButton.ClientID %>").click();
}
</script>
<style type="text/css">
#<%= serverButton.ClientID %> {
    visibility: hidden;
    display: none;
}
</style>



.ASPX.CS 文件

protected void Page_Load(object sender, EventArgs e) 
{
    if (Page.IsPostBack) 
    {
        // Triggered when serverButton has 'javascript:click()' triggered
    }
}
于 2016-08-18T14:43:45.927 回答
0

对于 WPF 应用程序

Button1.IsEnabled = false;  // Replace Button1 with your button name, false disables button
于 2018-06-26T18:15:47.667 回答
0

找到了这个。当您验证输入并且您不希望在验证失败时禁用提交按钮时工作。

<asp:Button Text="Submit"
            runat="server" 
            ID="btnSubmit" 
            OnClick="btnSubmit_Click" 
            OnClientClick=" if ( Page_ClientValidate() ) { this.value='Submitting..'; this.disabled=true; }" 
            UseSubmitBehavior="false" />

来源,本页底部,由匿名者提供。

于 2021-12-29T21:37:38.227 回答