Sitefinity 6.2 release will add captcha for form controls out of the box!
Register CAPTCHA as Form Control
First, go to the Sitefinity backend in Administration >> Settings switch to Advanced Settings and browse Toolboxes >> FormControls >> Sections >> Common >> Tools (this will register a RadCaptcha control inside Common section)
Click Create new and set Control CLR Type or Virtual Path to Telerik.Web.UI.RadCaptcha, Telerik.Web.UI put a name (without spaces) and a title for the UI.
Adding Custom Form Library to Sitefinity project
Next step is to implement new form control to fire RadCaptcha validation.
In Visual Studio add a project library. Add all necessary .dll dependencies (Telerik.Sitefinity.dll, Telerik.Web.UI.dll) found in SitefinityWebApp\bin. Add this library as a reference in SitefinityWebApp in order to be accessible in Sitefinity.
Code:
using
System;
using
System.ComponentModel;
using
System.Linq;
using
Telerik.Sitefinity.Modules.Forms.Web.UI;
using
Telerik.Sitefinity.Services;
using
Telerik.Sitefinity.Web.UI;
using
Telerik.Web.UI;
namespace
NewFormControl
{
public
class
FormControlWithCaptcha:FormsControl
{
private
readonly
string
captchaErrorMessage =
"Invalid Code, please try again"
;
private
RadCaptcha captcha;
protected
RadCaptcha MyCaptcha
{
get
{
if
(!SystemManager.IsDesignMode)
{
//retrieve the captcha control from the list of controls in the form
foreach
(
object
control
in
base
.FormControls.Controls[1].Controls)
{
if
(control.GetType() !=
typeof
(RadCaptcha))
{
continue
;
}
this
.captcha = control
as
RadCaptcha;
break
;
}
}
return
this
.captcha;
}
}
protected
override
void
InitializeControls(GenericContainer container)
{
if
(!SystemManager.IsDesignMode)
{
base
.InitializeControls(container);
base
.BeforeFormSave +=
new
EventHandler<CancelEventArgs>(
this
.FormsControlCustom_BeforeFormSave);
}
}
protected
void
FormsControlCustom_BeforeFormSave(
object
sender, CancelEventArgs e)
{
if
(
this
.MyCaptcha !=
null
&& !
this
.MyCaptcha.IsValid)
{
e.Cancel =
true
;
this
.MyCaptcha.ErrorMessage =
this
.captchaErrorMessage;
}
}
}
}
The code is quite simple – it inherits old FormsControl, adds an event to fire validation in base.InitializeControls(container) method. Adds a captcha error message, shown if the validation code doesn`t match.
The referenced project must be built under .NET 4.0 (if the target framework is 4.5 it will be incompatible with SitefinityWebApp)
Registering the Custom Form as a page control
Register this new form control as a page control.
Go to Administration >> Settings switch to Advanced Settings and browse Toolboxes >> PageControls >> Sections >> ContentToolboxSection >> Tools
Click Create new and set Control CLR Type or Virtual Path to NewFormControl.FormControlWithCaptcha put a name (without spaces) and a title for the UI.
As a result we got fully working form control with captcha:
Here you can download the complete sample.
Stanislav Velikov
Stanislav Velikov is a Tech Support Engineer at Telerik. He joined the Sitefinity Support team in April 2011.