我正在使用由reCAPTCHA提供的ASP.Net插件和控件。如果Web表單上的提交按鈕不在驗證組中,我可以成功地使控件工作。沒有reCAPTCHA控件的驗證組屬性。如何使ReCAPTCHA與ASP.Net中的驗證組一起工作(驗證碼)
有沒有人有任何成功的這個或任何解決方案來獲得reCAPTCHA控制工作時,Web表單上的驗證組?
我正在使用由reCAPTCHA提供的ASP.Net插件和控件。如果Web表單上的提交按鈕不在驗證組中,我可以成功地使控件工作。沒有reCAPTCHA控件的驗證組屬性。如何使ReCAPTCHA與ASP.Net中的驗證組一起工作(驗證碼)
有沒有人有任何成功的這個或任何解決方案來獲得reCAPTCHA控制工作時,Web表單上的驗證組?
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
。
您可以添加CustomValidator,實現將驗證ReCAPTCHA數據的OnServerValidate。 CustomValidator可以分配給任何ValidatorGroup。
這個工作對我來說...
添加自定義驗證用正確的驗證組。
其旗下的ServerValidate方法調用..
recaptcha.Validate();
然後檢查你的主要處理之前如下...
如果(Page.IsValid & & recaptcha.IsValid) { respose .WRITE( 「有效」); }
HTH。
見ReCaptchaImage和ReCaptchaValidator控制是Altairis的Web UI工具包的一部分:http://altairiswebui.codeplex.com/
它是開源的一套網絡組件,含有相當體面和符合標準的ASP.NET(如果我可以說這是作者: - )爲Web表單實現ReCaptcha。
想我會通過一些其他的一些工作代碼中的註釋只是擴大...
<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的想法。
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
}
}
要執行的客戶端要求的驗證和不改變的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控件的輸出,您可能不知道導致驗證器抓取工作的更改。
嗨bzlm。我已經完成了上述操作,但有兩個問題: 1)BaseValidator還要求您實現抽象EvaluateIsValid()方法(使用IsValid屬性不起作用)。 2)reCaptcha控件需要填寫ControlToValidate屬性。 你可以幫助任何這些嗎?謝謝。 – Nick 2009-06-10 09:36:20
我評論了由reCAPTCHA插件給出的IValidator實現,並將該邏輯推送到EvaluateIsValid()方法中。我也繞過了代碼中的ControlToValidate屬性,因爲它似乎不適用於這種情況。 另一個需要認識的點是你應該處理在頁面上多次調用驗證的情況。您需要確保您不會實際調用reCAPTCHA API兩次,因爲這會使控件失效。希望這可以幫助。 – rifferte 2009-06-13 03:27:10
嗨,是否有可能獲得更多信息,如何做到這一點?還是有人已經有一個完成的項目,他們可以分享? – TimS 2009-11-11 15:03:54