2011-12-12 64 views
7

我有以下按钮的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

设置为false在单击处理按钮的Enabled属性。 – adatapost

+1

当你想要这个按钮被禁用吗?客户端还是服务器回发后 –

回答

12

你有没有试过?:

protected void Button3_Click(object sender, EventArgs e) 
{ 
    Button3.Enabled = false; 
    //rest of code 
} 
+3

这样就不会在用户的浏览器中禁用按钮,他们仍然可以反复点击按钮不受限制。 – JDPeckham

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"); 
    } 
} 
1

,如果你想使用jQuery来做到这一点比

$('#button3').attr("disabled", true); 
+0

不应该是$('#button3')。attr(“disabled”,“disabled”)?我认为它会在Firefox中工作,但不是IE ... – Dave

+0

@Dave: - 这将在所有浏览器中工作 –

4
<asp:Button onclick="Button3_Click" ID="Button3" runat="server" Text="Save" 
OnClientClick="this.disabled = true; this.value = 'please wait ..';" 
UseSubmitBehavior="false"  /> 
28

使用按钮控件的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','') 

Redered 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/ 信用:戴夫·沃德(微博:@Encosia)

+0

这应该是最好的答案,因为按钮将恢复为在回发后启用 –

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

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); 
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 button在JavaScript中执行一个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 
    } 
} 
相关问题