2008-10-23 12 views
10

Ich benutze das ASP.Net Plugin und Kontrolle zur Verfügung gestellt von reCAPTCHA. Ich kann das Steuerelement erfolgreich ausführen, wenn der Absenden-Button im Webformular nicht in einer Validierungsgruppe ist. Es gibt kein Validierungsgruppenattribut für das reCAPTCHA-Steuerelement.Wie man reCAPTCHA mit einer ValidationGroup in ASP.Net (Captcha) arbeiten kann

Hat jemand Erfolg mit dieser oder irgendeiner Lösung gehabt, um das reCAPTCHA-Steuerelement zu aktivieren, wenn eine Validierungsgruppe im Webformular vorhanden ist?

Antwort

4

Das reCAPTCHA ASP.NET-Plug-in ist rückwärtskompatibel mit ASP.NET 1.1 geschrieben, was bedeutet, dass das ValidationGroup-Konzept (das in ASP.NET 2.0 neu ist) nicht unterstützt wird. Aber das Plug-In wird mit downloadable source code geliefert, so dass Sie es selbst modifizieren können, um ValidationGroup zu unterstützen.

In ASP.NET 2.0, validators should inherit from BaseValidator und implementieren IValidator, was bedeutet, sollten Sie den RecaptchaControl Typ von BaseValidator zu erben ändern statt WebControl. Sie müssen dann den Code ein wenig ändern, um alle Methoden und Eigenschaften zu implementieren, die in BaseValidator definiert sind. Dann können Sie stattdessen dieses neue Steuerelement auf Ihrer Seite verwenden, das jetzt ValidationGroup unterstützt.

+0

Hallo bzlm. Ich habe das obige getan, aber habe zwei Probleme: 1) BaseValidator erfordert auch Sie die abstrakte EvaluateIsValid() -Methode zu implementieren (erneute die IsValid -Eigenschaft mit es funktioniert nicht). 2) Das reCaptcha-Steuerelement benötigt dann die ControlToValidate-Eigenschaft gefüllt. Können Sie mit denen helfen? Vielen Dank. – Nick

+0

Ich habe die IValidator-Implementierung, die das reCAPTCHA-Plugin liefert, auskommentiert und diese Logik in die EvaluateIsValid() -Methode übertragen. Ich habe auch die ControlToValidate-Eigenschaft in Code umgangen, da es in diesem Szenario nicht zu gelten scheint. Ein weiterer Punkt zu erkennen ist, dass Sie Situationen behandeln sollten, in denen validate mehr als einmal auf der Seite aufgerufen wird. Sie müssen sicherstellen, dass Sie die reCAPTCHA-API nicht zweimal aufrufen, da dies das Steuerelement ungültig macht. Hoffe das hilft. – rifferte

+1

Hallo, wäre es möglich, ein bisschen mehr Informationen darüber zu bekommen, wie man das macht? Oder hat jemand bereits ein abgeschlossenes Projekt, das sie teilen können? – TimS

5

Sie können CustomValidator hinzufügen und OnServerValidate implementieren, mit dem die ReCAPTCHA-Daten überprüft werden. CustomValidator kann einer beliebigen ValidatorGroup zugewiesen werden.

+0

Schöne Lösung. Sie müssen dann nur recaptcha.IsValid in Ihrer OnServerValidate-Methode überprüfen. Sehr einfach! – Obfuskater

2

Dieser arbeitete für mich ...

  1. einen benutzerdefinierten Validator mit der richtigen Validierungsgruppe hinzufügen.

  2. Sein seine ServerValidate Methodenaufruf ..

    recaptcha.Validate(); 
    
  3. Dann sind Sie nach wie vor Ihre Hauptverarbeitung folgt ...

    if (Page.IsValid & & recaptcha.IsValid) { respose .write ("gültig"); }

HTH.

+1

Ist das nicht im Wesentlichen das gleiche wie in dieser Antwort: http://stackoverflow.com/questions/231344/how-to-make-recaptcha-work-with-a-validationgroup-in-asp-net-captcha/656888 # 656888 – bzlm

0

See ReCaptchaImage und ReCaptchaValidator Kontrollen Teil Altairis Web UI Toolkit ist: http://altairiswebui.codeplex.com/

Es ist Open-Source-Satz von Web-Komponenten, mit ganz anständig und ASP.NET standardkonforme (wenn ich sage, kann es der Autor zu sein: -) Implementierung von ReCaptcha für Web Forms.

7

dachte, ich würde nur durch ein paar andere mit einigen Arbeits Code auf die Kommentare erweitern ...

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

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

Und hinter Code ...

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

jemand ein einfacher denken Art und Weise es zu tun? Ein großes Lob an Vidalik für die Überlegungen zur Verwendung von OnServerValidate.

+2

+1 für die Bereitstellung von Arbeitscode. –

1

RemotecUk 's Vorschlag funktionierte für mich, ohne benutzerdefinierten Validator hinzuzufügen.

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

clientseitige Validierung erforderlich, um zu tun, und ohne die reCaptcha Quellcode zu verändern, habe ich eine JavaScript-Funktion, um das Eingabetextfeld zu validieren eine CustomValidator meiner Form und erstellt.

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

ich den ID des erzeugten Eingabefeld auf den Quellcode der Seite sah und bemerkte, herauszufinden, dass das Eingabefeld immer recaptcha_response_field war. (Bitte korrigieren Sie mich, wenn ich falsch liege) Da ich dies wusste, war ich in der Lage, das JavaScript zu erstellen (mithilfe von JQuery und einer benutzerdefinierten Funktion, um die Gültigkeit eines Steuerelements zu überprüfen).

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

HINWEIS: Wenn die Entwickler die Ausgabe der Steuer reCaptcha ändern, können Sie nicht von der Änderung des Validator resultierenden bewusst sein, ergreifen zu arbeiten.

+0

'isFieldValid (" input [id $ = 'recaptcha_response_field'] "); 'kann auch sein' isFieldValid ("# recaptcha_response_field"); '. Meine ursprüngliche Referenz ist ein Standard, den ich habe, damit ich CustomValidators für Serverkontrollen leicht erstellen kann. – cbillowes