2008-10-23 76 views

回答

4

reCAPTCHA ASP.NET插件被寫入爲向後兼容ASP.NET 1.1,這意味着ValidationGroup概念(這是ASP.NET 2.0中的新概念)不受支持。但插件隨附downloadable source code,因此您可以自行修改以支持ValidationGroup

在ASP.NET 2.0中,validators should inherit from BaseValidator和實施IValidator,這意味着你應該改變RecaptchaControl類型從BaseValidator而不是WebControl繼承。然後,您需要稍微修改代碼以實現BaseValidator中定義的所有方法和屬性。然後你可以在你的頁面上使用這個新的控件,現在它支持ValidationGroup

+0

嗨bzlm。我已經完成了上述操作,但有兩個問題: 1)BaseValidator還要求您實現抽象EvaluateIsValid()方法(使用IsValid屬性不起作用)。 2)reCaptcha控件需要填寫ControlToValidate屬性。 你可以幫助任何這些嗎?謝謝。 – Nick 2009-06-10 09:36:20

+0

我評論了由reCAPTCHA插件給出的IValidator實現,並將該邏輯推送到EvaluateIsValid()方法中。我也繞過了代碼中的ControlToValidate屬性,因爲它似乎不適用於這種情況。 另一個需要認識的點是你應該處理在頁面上多次調用驗證的情況。您需要確保您不會實際調用reCAPTCHA API兩次,因爲這會使控件失效。希望這可以幫助。 – rifferte 2009-06-13 03:27:10

+1

嗨,是否有可能獲得更多信息,如何做到這一點?還是有人已經有一個完成的項目,他們可以分享? – TimS 2009-11-11 15:03:54

5

您可以添加CustomValidator,實現將驗證ReCAPTCHA數據的OnServerValidate。 CustomValidator可以分配給任何ValidatorGroup。

2

這個工作對我來說...

  1. 添加自定義驗證用正確的驗證組。

  2. 其旗下的ServerValidate方法調用..

    recaptcha.Validate(); 
    
  3. 然後檢查你的主要處理之前如下...

    如果(Page.IsValid & & recaptcha.IsValid) { respose .WRITE( 「有效」); }

HTH。

0

見ReCaptchaImage和ReCaptchaValidator控制是Altairis的Web UI工具包的一部分:http://altairiswebui.codeplex.com/

它是開源的一套網絡組件,含有相當體面和符合標準的ASP.NET(如果我可以說這是作者: - )爲Web表單實現ReCaptcha。

7

想我會通過一些其他的一些工作代碼中的註釋只是擴大...

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

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

和代碼背後...

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

誰能想到一個更簡單這樣做的方法?感謝Vidalik關於使用OnServerValidate的想法。

1

RemotecUk的建議爲我工作,而無需添加自定義驗證程序。

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

要執行的客戶端要求的驗證和不改變的ReCaptcha源代碼,我添加了一個的CustomValidator到我的形狀和所產生的JavaScript函數來驗證輸入文本字段。

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

要找出我看着頁面的源代碼,發現輸入字段總是recaptcha_response_field生成的輸入字段的ID。 (請糾正我,如果我錯了)知道這一點,我能夠創建JavaScript(使用JQuery和自定義函數來檢查控件的有效性)。

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

注意:如果開發人員更改reCaptcha控件的輸出,您可能不知道導致驗證器抓取工作的更改。