2011-12-12 25 views
7

Tengo el siguiente evento onclick para un botón. una vez que este evento esté listo, quiero deshabilitar el botón. ¿Alguien puede ayudarme a entender cómo hacerlo?Cómo deshabilitar un botón después del primer clic

Aquí está el código que ejecuto en el 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"); 
    } 
} 

Aquí está el botón que quiero deshabilitar.

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

como falsa para la propiedad Enabled del botón en el controlador de clic. – adatapost

+1

puede tener en claro cuándo desea que se deshabilite este botón? Cliente o después de la devolución de datos del servidor –

Respuesta

12

Ha intentado ?:

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

esto no desactivaría el botón para el usuario en su navegador, todavía podrían hacer clic en el botón desinhibido repetidamente. – JDPeckham

2

Ver código marcado

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

si quiere hacerlo mediante el uso de jQuery que

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

¿No debería ser $ ('# button3'). Attr ("disabled", "disabled")? Creo que funcionará en Firefox pero no en IE ... – Dave

+0

@Dave: - Esto funcionará en todos los navegadores –

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

Utilice las propiedades OnClientClick y UseSubmitBehavior del control de botón.

<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 le permite agregar secuencias de comandos OnClick del lado del cliente. En este caso, JavaScript desactivará el elemento del botón y cambiará su valor de texto a un mensaje de progreso. Cuando se complete la devolución de datos, la página recién renderizada revertirá el botón a su estado inicial sin ningún trabajo adicional.

El único inconveniente que presenta la desactivación de un botón de envío en el lado del cliente es que cancelará el envío del navegador y, por lo tanto, la devolución de datos. Al establecer la propiedad UseSubmitBehavior en falso, se indica a .NET que inserte el script de cliente necesario para iniciar la devolución de datos de todos modos, en lugar de confiar en el comportamiento de envío de formularios del navegador. En este caso, el código se inyecta sería:

__doPostBack('BtnSubmit','') 

Redered HTML:

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

Esto debe darle el comportamiento deseado.

Desde: http://encosia.com/disable-a-button-control-during-postback/ Crédito: Dave Ward (Twitter: @Encosia)

+0

Esta debería ser la mejor respuesta ya que el botón volverá a habilitarse después de la publicación. –

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

llamada esta OnClientClick del botón

5

Tendrá que establecer la propiedad Enabled del botón en el lado del servidor código detallado por otros carteles. Sin embargo, si intenta evitar envíos múltiples desde el mismo botón, necesitará una táctica ligeramente diferente.

Agregar un método a su clase:

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

} 

En Load añadir

DisableButtonDuringPostback(this.Page, Button3); 
0

Ésta es una entrada antigua, sin embargo no creo que ha sido totalmente contestada.

En primer lugar, en ASP.NET WebForms, envía una solicitud HTTP GET al servidor web que maneja su solicitud y genera el código HTML del lado del cliente para que se visualice el navegador.

Al interactuar con un control del lado del servidor, los valores están contenidos dentro del campo de entrada oculto VIEWSTATE para las propiedades (como boolean para Enabled).

Cuando hace clic en un botón, envía una solicitud HTTP POST al servidor web en la misma página. Esta es la razón por la cual el evento Page_Load se activa al hacer clic en el botón.

Una vez que se haya atendido la solicitud HTTP POST, se devolverá el código HTML para que el navegador la vuelva a procesar. Por esta razón, si usted tiene el siguiente código en su evento Page_Load:

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

No va a mostrar al usuario de que ha sido desactivado hasta que la solicitud HTTP POST se ha manejado y devolvió el código de cliente actualizado.

De la pregunta inicial, parecía que el servidor tardaba varios segundos en devolver una respuesta, por lo que se podían disparar varios eventos de devolución de datos al hacer clic en el botón una y otra vez.

Una manera simple (pero molesta) de resolver su problema sería tener un HTML button normal ejecutando un function en JavaScript que lo desactiva y dispara el evento onclick de un control del lado del servidor. El problema con esto sería entonces que cuando la solicitud HTTP POST devuelve una respuesta, representaría el HTML normal button como habilitado. Para resolver esto, simplemente puede desactivarlo en JavaScript utilizando el código ASP.NET en línea. He aquí un ejemplo:

.ASPX Archivo

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

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