Pregunta

Estoy usando el complemento y control de ASP.Net proporcionado por reCAPTCHA . Puedo conseguir que el control funcione correctamente si el botón de envío en el formulario web no está en un grupo de validación. No hay ningún atributo de grupo de validación para el control reCAPTCHA.

¿Alguien ha tenido éxito con esta u otras soluciones para que el control reCAPTCHA funcione cuando hay un grupo de validación en el formulario web?

¿Fue útil?

Solución

El complemento reCAPTCHA ASP.NET está escrito para ser compatible con versiones anteriores de ASP.NET 1.1, lo que significa que el concepto ValidationGroup (que es nuevo en ASP.NET 2.0) no es compatible. Pero el complemento viene con código fuente descargable , para que pueda modificarlo usted mismo para admitir ValidationGroup .

En ASP.NET 2.0, validadores debe heredar de BaseValidator e implementar IValidator , lo que significa que debe cambiar el tipo RecaptchaControl para heredar de BaseValidator en lugar de Control web . Luego deberá modificar un poco el código para implementar todos los métodos y propiedades definidos en BaseValidator . Luego puede usar este nuevo control en su página, que ahora admite ValidationGroup .

Otros consejos

Pensé que simplemente ampliaría los comentarios de algunos otros con algún código de trabajo ...

<recaptcha:RecaptchaControl ID="RecaptchaControl" runat="server" />

<asp:CustomValidator ID="RecaptchaValidator" runat="server" OnServerValidate="RecaptchaValidator_ServerValidate" ErrorMessage="Recaptcha input invalid." ValidationGroup="SomeValidationGroup" />

Y el código detrás ...

protected void RecaptchaValidator_ServerValidate(object sender, ServerValidateEventArgs e)
{
    this.RecaptchaControl.Validate();
    e.IsValid = this.RecaptchaControl.IsValid;
}

¿Puede alguien pensar en una forma más sencilla de hacerlo? Felicitaciones a Vidalik por las ideas sobre el uso de OnServerValidate.

Puede agregar CustomValidator, implementar OnServerValidate que validaría los datos ReCAPTCHA. CustomValidator se puede asignar a cualquier ValidatorGroup.

Esto funcionó para mí ...

  1. Agregue un validador personalizado con el grupo de validación correcto.

  2. Es su llamada al método ServerValidate ...

    recaptcha.Validate();
    
  3. Luego verifique lo siguiente antes de su procesamiento principal ...

    if (Page.IsValid & amp; & amp; recaptcha.IsValid) { respose.write (" válido "); }

HTH.

La sugerencia de

RemotecUk funcionó para mí sin agregar un validador personalizado.

protected void button_onclick(object sender, EventArgs e){
    recaptcha.Validate();
    if(!Page.IsValid && recaptcha.IsValid){
        lblError.Text = "Please check your captcha entry";
    } else {
        //do your thing
    }
}

Para realizar la validación requerida del lado del cliente y sin alterar el código fuente de reCaptcha, agregué un CustomValidator a mi formulario y creé una función de JavaScript para validar el campo de texto de entrada.

<asp:CustomValidator ID="reqRecaptcha" runat="server" ClientValidationFunction="validateRecaptcha" Text="Required"></asp:CustomValidator>

Para averiguar el ID del campo de entrada generado, miré el código fuente de la página y noté que el campo de entrada siempre era recaptcha_response_field . (Corríjame si me equivoco) Sabiendo esto, pude crear el JavaScript (usando JQuery y una función personalizada para verificar la validez de un control).

    function validateRecaptcha(sender, args) {
        args.IsValid = isFieldValid("input[id$='recaptcha_response_field']");
    }

NOTA: Si los desarrolladores cambian la salida del control reCaptcha, es posible que no esté al tanto del cambio que provoca que el validador se inmovilice.

Consulte los controles ReCaptchaImage y ReCaptchaValidator que forman parte del kit de herramientas de UI web de Altairis: http://altairiswebui.codeplex.com/

Es un conjunto de componentes web de código abierto, que contiene bastante decente y cumple con los estándares ASP.NET (si puedo decir que es el autor :-) implementación de ReCaptcha para formularios web.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top