2010-06-22 58 views
5

Tengo formularios con pago en el sitio ASP.NET, cuando el usuario hace clic en el botón asp: Button alguna vez lo envía algunas veces. Quiero deshabilitar esta funcionalidad sin dañar el sitio ASP.NET actual (me refiero a no jQuery sofisticado, a menos que sea muy básico y no interfiera con la validación incorporada de ASP.NET)ASP.NET ¿Cómo deshabilitar el botón al enviar?

gracias !!!

+0

¿Quieres que sea inhabilitada siempre después de clic por primera vez? – Samiksha

+0

@Samiksha, tengo que deshabilitar después de enviar formularios porque si desactivo después del primer clic, se desactiva una vez que hago clic para validar los datos con la validación de ASP.NET. – eugeneK

+0

Tengo la actualización de mi respuesta, por favor revise ahora. lo que debe hacer, antes de desactivar el botón, debe comprobar la página_ClientValidate() –

Respuesta

9

Usted puede hacer esto en el botón en el lado del cliente:

onClientClick="this.disabled=true;" 

También puede utilizar el enfoque de Mahoma con esto:

onClientClick="if(Page_ClientValidate()){this.disabled=true;}" 

Si esto sigue sin funcionar, puede iniciar la devolución de datos a sí mismo antes de deshabilitar el botón:

onClientClick="if(Page_ClientValidate()){__doPostBack;this.disabled=true;}" 
+0

@Oded, solución muy inteligente, como ... –

+0

@Oded, ¡gracias! – eugeneK

+1

@Oded, no funciona en Chrome después de que se haya realizado la validación de ASP.NET. – eugeneK

1

que podría ir para blockUI. es muy bueno, ya que bloquea la interfaz de usuario completa, no solo el botón, de modo que un usuario no puede hacer clic en otro botón (por ejemplo, desea guardar ... toma algo de tiempo ... el usuario hace clic en eliminar mientras tanto)

+0

El problema con ese enfoque es. Hay dos cosas ASP: Button does. 1.JS validación utilizando ASP.NET Validators. 2. Disparo OnClick = "" Este script se puede ejecutar en el cliente, por lo que no se validará JS. – eugeneK

+0

1. No creo que esto sea un problema. puede volver a definir la función de validación del cliente y ejecutar el bloqueo después de que la validación sea correcta. 2. ¿Cómo, por el amor de Dios, puedes desencadenar un evento de servidor en el lado del cliente? resumen: debe proporcionar más información y algunos códigos (código subyacente, marcado y final html). –

+0

por cierto, hay otro enfoque: ¿por qué no volver a marcar el manejador de envío del formulario? si el formulario se envía en la última instancia (por ejemplo, la validación de su cliente) puede bloquear el ui, ¿o no? –

2

Crear un método estático:

/// <summary> 
/// Disable the button on submit. Remember to set up the validationGroup property if there is more than one form/submit 
/// </summary> 
/// <param name="objButton">The submit button object</param> 
public static void disableSubmitButton(Button objButton) 
{ 
    objButton.CausesValidation = false; 
    string validationGroup = objButton.ValidationGroup; 
    if (string.IsNullOrEmpty(validationGroup)) 
     objButton.Attributes.Add("onclick", "if (Page_ClientValidate()) {this.value=\"Processing...\";this.disabled=true;" + objButton.Page.ClientScript.GetPostBackEventReference(objButton, "").ToString() + "}"); 
    else 
     objButton.Attributes.Add("onclick", "if (Page_ClientValidate(\"" + validationGroup + "\")) {this.value=\"Processing...\";this.disabled=true;" + objButton.Page.ClientScript.GetPostBackEventReference(objButton, "").ToString() + "}"); 
} 

Crear un formulario y poner un botón en su forma (Recuerde que debe establecer la propiedad ValidationGroup si hay más de una forma/enviar):

<asp:Button runat="server" ID="btnSubmit" OnClick="btnSubmit_Click" /> 

Llámelo en la carga de la página:

CommonFunctions.disableSubmitButton(btnSubmit); 
2
onClientClick="if(Page_ClientValidate()){__doPostBack;this.disabled=true;}" 
UseSubmitBehavior="false" 
2

Sé que esto es una vieja pregunta, pero todas las respuestas fallar en algunas circunstancias. Principalmente corre el riesgo de que aparezca el error "Page_ClientValidate is not defined" en el navegador.

Este enfoque funciona:

public static void DisableSubmitButton(Button button) 
{ 
    button.Attributes.Add("onclick", "this.disabled=true;" + button.Page.ClientScript.GetPostBackEventReference(button, String.Empty)); 
} 
+0

Ninguna de las otras respuestas funcionó en mi situación, pero esto no funcionó. Gracias. –

Cuestiones relacionadas