2011-12-12 10 views
7

Ho il seguente evento onclick per un pulsante. una volta che questo evento è disattivato, voglio disabilitare il pulsante. Qualcuno può aiutarmi a capire come farlo?Come disattivare un pulsante dopo il primo clic

Ecco il codice che eseguo sull'evento 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"); 
    } 
} 

Ecco il pulsante che voglio disabilitare.

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

FALSO serie di proprietà Enabled di pulsante nel gestore di clic. – adatapost

+1

si può cancellare quando si desidera disabilitare questo pulsante? Client o postback del server –

risposta

12

Hai provato ?:

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

questo non disabiliterà il pulsante all'utente nel proprio browser, sarà comunque in grado di fare clic sul pulsante ripetutamente non inibito. – JDPeckham

2

See segnato codice

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

se si vuole farlo utilizzando jQuery di

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

Non dovrebbe essere $ ('# button3'). Attr ("disabilitato", "disabilitato")? Penso che funzionerà in Firefox ma non in IE ... – Dave

+0

@Dave: - Funzionerà in tutti i browser –

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

Utilizzare le proprietà OnClientClick e UseSubmitBehavior del controllo pulsante.

<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 consente di aggiungere script OnClick lato client. In questo caso, il JavaScript disabiliterà l'elemento button e cambierà il suo valore testuale in un messaggio progress. Al termine del postback, la pagina appena renderizzata ripristinerà il pulsante del suo stato iniziale senza alcun lavoro aggiuntivo.

Quello insidia che viene fornito con la disabilitazione di un pulsante di invio sul lato client è che sarà annullare il browser di presentare, e quindi il postback. L'impostazione della proprietà UseSubmitBehavior su false indica a .NET di inserire lo script client necessario per attivare comunque il postback, invece di basarsi sul comportamento di invio del modulo del browser. In questo caso, il codice si inietta sarebbe:

__doPostBack('BtnSubmit','') 

redered HTML:

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

Questo dovrebbe dare il comportamento desiderato.

Da: http://encosia.com/disable-a-button-control-during-postback/ Credit: Dave Ward (Twitter: @Encosia)

+0

questa dovrebbe essere la migliore risposta dal momento che il pulsante tornerà ad essere abilitato dopo il post –

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; 
     } 
    } 

chiamano questo OnClientClick del tasto

5

È necessario impostare la proprietà Enabled del pulsante nel lato server codice come dettagliato da altri poster. Tuttavia, se stai cercando di impedire più segnalazioni dallo stesso pulsante, avrai bisogno di una virata leggermente diversa.

aggiungere un metodo alla classe:

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()); 

} 

In Page_Load aggiungere

DisableButtonDuringPostback(this.Page, Button3); 
0

Questo è un vecchio post, ma non credo che è stato pienamente risposto.

In primo luogo, in ASP.NET WebForms, si invia una richiesta HTTP GET al server Web che gestisce la richiesta e genera codice HTML lato client per il rendering del browser.

Poiché si interagisce con un controllo sul lato server, i valori sono contenuti nel campo di input nascosto VIEWSTATE per le proprietà (ad esempio il valore booleano per Enabled).

Quando si fa clic su un pulsante, viene inviata una richiesta HTTP POST al server Web sulla stessa pagina. Questo è il motivo per cui l'evento Page_Load viene generato quando si fa clic sul pulsante.

Una volta che la richiesta HTTP POST è stata gestita, verrà restituito il codice HTML per il browser. Per questo motivo, se avete il seguente codice nel tuo evento Page_Load:

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

Non visualizzerà all'utente che è stato disabilitato fino a quando la richiesta HTTP POST è stata gestita e restituito il codice lato client aggiornato.

Dalla domanda iniziale, è emerso che il server impiegava diversi secondi per restituire una risposta, pertanto è possibile attivare più eventi di postback facendo nuovamente clic sul pulsante.

Un modo semplice (ma fastidioso) per risolvere il problema potrebbe essere un normale HTML button che esegue un function in JavaScript che lo disabilita e attiva l'evento onclick di un controllo lato server. Il problema con questo sarebbe quindi che quando la richiesta HTTP POST restituisce una risposta, renderebbe il normale HTML button come abilitato. Per risolvere questo problema, puoi semplicemente disabilitarlo in JavaScript usando il codice ASP.NET in linea. Ecco un esempio:

ASPX File

<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 file

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
    { 
     // Triggered when serverButton has 'javascript:click()' triggered 
    } 
}