[SF 5.0] What is the easy and best method to override RegistrationForm widget?
Hi,
I want insert some logic (behind code) into the RegistrationForm when the user click the button "Register".
For example: Lookup into a external database if the user is still register. Stop the registration if exist or display a message...
What is the best and easy method to accomplish this goal? And keep all advantage of the RegistrationForm widget like email, activation, roles...
Thanks for your help.
Hi Michel,
You can create a custom control and inherit from the RegistrationForm. The registratino form has the following method that you can override,
protected virtual void RegisterButton_Click(object sender, System.EventArgs e)
protected override string LayoutTemplateName;
or
public override string LayoutTemplatePath;
Thanks Bobby for your response.
Can you give me a basic example how you inherit from the RegistrationForm?
Ok finally I found it about how you inherit RegistrationForm
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Telerik.Sitefinity.Web.UI;
using Telerik.Sitefinity.Security.Web.UI;
namespace SitefinityWebApp.UserControls
public class customRegistrationForm : RegistrationForm
protected override void RegisterButton_Click(object sender, System.EventArgs e)
// Hello Registration
Hi Michel,
I just created a new User registration form that contained extra
information than what is provided out of the box. Here is the code that I
used. I am not sure if you need this functionality but you can use this
as an example of what you can do. To add the extra information for
sitefinity to persist, I went to the admin part of the site and went to
1. Administration -> Users.
2. Once on the users page, look to the far right and you will see a
section called 'Settings For Users'. Under this section, click on the
link that says Manage Profile Types.
3. When the Manage Profile Types UI is launched, you will see 'Basic
Profile'. Click the link to edit this profile. This is the UI where you
can add extra fields to a user.
4. Once I added those fields I created my custom template to display the
new UI and the custom class to save and validate my custom information.
5. The Sitefinity Registration control will save any FieldControls
located in the UI as long as each FieldControl that needs saving
contains a DataFieldName and DataItemType as shown in my template. If a
FieldControl does not contain these two properties, it will be ignored.
Below is my code and my template for the UI.
<%@ Control Language="C#" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.Fields" Assembly="Telerik.Sitefinity" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI" Assembly="Telerik.Sitefinity" %>
<%@ Register TagPrefix="sfvalidation" Namespace="Telerik.Sitefinity.Web.UI.Validation.Definitions" Assembly="Telerik.Sitefinity"%>
<%@ Register TagPrefix="pintek" Namespace="Controls" Assembly="Controls" %>
<
fieldset
class
=
"sfregisterFormWrp"
>
<
asp:Panel
ID
=
"formContainer"
runat
=
"server"
DefaultButton
=
"registerButton"
>
<
ol
class
=
"sfregisterFieldsList"
>
<
sf:TextField
ID
=
"firstName"
runat
=
"server"
DataFieldName
=
"FirstName"
DataItemType
=
"Telerik.Sitefinity.Security.Model.SitefinityProfile"
DisplayMode
=
"Write"
Title="<%$ Resources:Labels, FirstName %>" CssClass="sfregisterField sfregisterFirstName" WrapperTag="li" />
<
sf:TextField
ID
=
"lastName"
runat
=
"server"
DataFieldName
=
"LastName"
DataItemType
=
"Telerik.Sitefinity.Security.Model.SitefinityProfile"
DisplayMode
=
"Write"
Title="<%$ Resources:Labels, LastName %>" CssClass="sfregisterField sfregisterLastName" WrapperTag="li" />
<
sf:TextField
ID
=
"email"
runat
=
"server"
DataFieldName
=
"Email"
DisplayMode
=
"Write"
Title="<%$ Resources:Labels, Email %>" CssClass="sfregisterField sfregisterEmail" WrapperTag="li">
<
ValidatorDefinition
MessageCssClass
=
"sfError"
Required
=
"true"
ExpectedFormat
=
"EmailAddress"
/>
</
sf:TextField
>
<
sf:TextField
ID
=
"userName"
runat
=
"server"
DataFieldName
=
"UserName"
DisplayMode
=
"Write"
Title="<%$ Resources:Labels, UserName %>" CssClass="sfregisterField sfregisterUserName" WrapperTag="li">
<
ValidatorDefinition
MessageCssClass
=
"sfError"
Required
=
"true"
/>
</
sf:TextField
>
<
sf:TextField
ID
=
"password"
runat
=
"server"
DisplayMode
=
"Write"
Title="<%$ Resources:Labels, Password %>" IsPasswordMode="true" CssClass="sfregisterField sfregisterPassword" WrapperTag="li">
<
ValidatorDefinition
MessageCssClass
=
"sfError"
Required
=
"true"
/>
</
sf:TextField
>
<
sf:TextField
ID
=
"reTypePassword"
runat
=
"server"
DisplayMode
=
"Write"
Title="<%$ Resources:UserProfilesResources, ReTypePassword %>" IsPasswordMode="true" CssClass="sfregisterField sfregisterConfirmPassword" WrapperTag="li">
<
ValidatorDefinition
MessageCssClass
=
"sfError"
>
<
ComparingValidatorDefinitions
>
<
sfvalidation:ComparingValidatorDefinition
ControlToCompare
=
"password"
Operator
=
"Equal"
ValidationViolationMessage="<%$ Resources:ErrorMessages, CreateUserWizardDefaultConfirmPasswordCompareErrorMessage %>"/>
</
ComparingValidatorDefinitions
>
</
ValidatorDefinition
>
</
sf:TextField
>
<
sf:ChoiceField
ID
=
"gender"
runat
=
"server"
DisplayMode
=
"Write"
DataFieldName
=
"gender"
DataItemType
=
"Telerik.Sitefinity.Security.Model.SitefinityProfile"
RenderChoicesAs
=
"DropDown"
Title
=
"Gender*"
MutuallyExclusive
=
"false"
WrapperTag
=
"li"
>
<
Choices
>
<
sitefinity:ChoiceItem
text
=
"Male"
value
=
"Male"
/>
<
sitefinity:ChoiceItem
text
=
"Female"
value
=
"Female"
/>
</
Choices
>
<
ValidatorDefinition
MessageCssClass
=
"sfError"
Required
=
"true"
/>
</
sf:ChoiceField
>
<
sf:TextField
ID
=
"zipcode"
runat
=
"server"
DataFieldName
=
"zip_code"
DataItemType
=
"Telerik.Sitefinity.Security.Model.SitefinityProfile"
DisplayMode
=
"Write"
Title
=
"Zip Code"
CssClass
=
"sfregisterField sfregisterZipCode"
WrapperTag
=
"li"
>
<
ValidatorDefinition
MessageCssClass
=
"sfError"
Required
=
"true"
ExpectedFormat
=
"USZipCode"
/>
</
sf:TextField
>
<!-- Right now, the site only supports regions in the U.S., hide this control -->
<
div
style
=
"display:none"
>
<
pintek:CountryField
ID
=
"country"
runat
=
"server"
DataFieldName
=
"country"
DataItemType
=
"Telerik.Sitefinity.Security.Model.SitefinityProfile"
DisplayMode
=
"Write"
RenderChoicesAs
=
"DropDown"
MutuallyExclusive
=
"true"
Title
=
"State"
WrapperTag
=
"li"
>
<
ValidatorDefinition
MessageCssClass
=
"sfError"
Required
=
"true"
/>
</
pintek:CountryField
>
</
div
>
<
sf:DateField
ID
=
"birthday"
DisplayMode
=
"Write"
Title
=
"Birthday"
DataItemType
=
"Telerik.Sitefinity.Security.Model.SitefinityProfile"
DataFieldName
=
"gender"
Displaymode
=
"Write"
WrapperTag
=
"Li"
/>
<
sf:ChoiceField
ID
=
"educationLevel"
runat
=
"server"
DisplayMode
=
"Write"
DataItemType
=
"Telerik.Sitefinity.Security.Model.SitefinityProfile"
DataFieldName
=
"education_level"
RenderChoicesAs
=
"DropDown"
Title
=
"Highest Education Level"
MutuallyExclusive
=
"false"
WrapperTag
=
"li"
>
<
Choices
>
<
sitefinity:ChoiceItem
text
=
"Leave Undislosed"
value
=
"Leave Undislosed"
/>
<
sitefinity:ChoiceItem
text
=
"High School"
value
=
"High School"
/>
<
sitefinity:ChoiceItem
text
=
"G.E.D"
value
=
"G.E.D"
/>
<
sitefinity:ChoiceItem
text
=
"Bachelors"
value
=
"Bachelors"
/>
<
sitefinity:ChoiceItem
text
=
"Masters"
value
=
"Masters"
/>
<
sitefinity:ChoiceItem
text
=
"Phd"
value
=
"Phd"
/>
</
Choices
>
<
ValidatorDefinition
MessageCssClass
=
"sfError"
Required
=
"true"
/>
</
sf:ChoiceField
>
<
sf:ChoiceField
ID
=
"incomeLevel"
runat
=
"server"
DataFieldName
=
"income_level"
DataItemType
=
"Telerik.Sitefinity.Security.Model.SitefinityProfile"
DisplayMode
=
"Write"
RenderChoicesAs
=
"DropDown"
Title
=
"Income Level:"
MutuallyExclusive
=
"false"
WrapperTag
=
"li"
>
<
Choices
>
<
sitefinity:ChoiceItem
text
=
"Leave Undislosed"
value
=
"Leave Undislosed"
/>
<
sitefinity:ChoiceItem
text
=
"$10,000 - $50,000"
value
=
"$10,000 - $50,000"
/>
<
sitefinity:ChoiceItem
text
=
"$50,000 - $100,000"
value
=
"$50,000 - $100,000"
/>
<
sitefinity:ChoiceItem
text
=
"Above $100,000"
value
=
"Above $100,000"
/>
</
Choices
>
<
ValidatorDefinition
MessageCssClass
=
"sfError"
Required
=
"true"
/>
</
sf:ChoiceField
>
<
sf:HierarchicalTaxonField
ID
=
"taxonomy"
runat
=
"server"
Title
=
"Categories of Interest"
AutoPostBack
=
"false"
DataFieldName
=
"business_services"
DataItemType
=
"Telerik.Sitefinity.Security.Model.SitefinityProfile"
AllowMultipleSelection
=
"true"
AllowRootSelection
=
"false"
DisplayMode
=
"Write"
ShowCreateNewTaxonButton
=
"false"
ShowDoneSelectingButton
=
"false"
WrapperTag
=
"Li"
/>
</
ol
>
<
asp:Panel
ID
=
"errorsPanel"
runat
=
"server"
CssClass
=
"sfErrorSummary"
Visible
=
"false"
/>
<
div
class
=
"sfregisterLnkWrp"
>
<
asp:Button
runat
=
"server"
ID
=
"registerButton"
Text="<%$ Resources:UserProfilesResources, Register %>" CssClass="sfregisterSaveLnk"/>
</
div
>
</
asp:Panel
>
<
sf:SitefinityLabel
id
=
"successMessageLabel"
runat
=
"server"
WrapperTagName
=
"div"
CssClass
=
"sfSuccess"
/>
<
asp:Panel
ID
=
"configurationErrorsPanel"
runat
=
"server"
CssClass
=
"sfErrorSummary"
Visible
=
"false"
>
<
div
runat
=
"server"
id
=
"smtpSettingsErrorWrapper"
Visible
=
"false"
>
<
asp:Label
runat
=
"server"
id
=
"smtpConfigurationErrorTitle"
Text="<%$ Resources:ErrorMessages, CannotSendEmails %>"/>
<
asp:Label
runat
=
"server"
id
=
"smtpConfigurationError"
></
asp:Label
>
</
div
>
</
asp:Panel
>
</
fieldset
>
using
System;
using
System.Linq;
using
Telerik.Sitefinity.Security.Web.UI;
using
Telerik.Sitefinity.Taxonomies;
using
Telerik.Sitefinity.Taxonomies.Model;
using
Telerik.Sitefinity.Web.UI.Fields;
namespace
PublicControls
public
class
UserRegistration : RegistrationForm
private
const
string
TemplateName =
"PublicControls.Resources.Views.UserRegistration.ascx"
;
protected
override
string
LayoutTemplateName
get
return
TemplateName;
public
override
string
LayoutTemplatePath
get
return
string
.Empty;
set
base
.LayoutTemplatePath = value;
protected
override
void
InitializeControls(Telerik.Sitefinity.Web.UI.GenericContainer container)
base
.InitializeControls(container);
TaxonomyManager manager = TaxonomyManager.GetManager();
var taxonomy = manager.GetTaxonomies<HierarchicalTaxonomy>().Where(i => i.Name ==
"BusinessServices"
);
if
(taxonomy.Count() == 1)
HierarchicalTaxonomy services = taxonomy.Single();
Tree.TaxonomyId = services.Id;
Tree.TaxonomyProvider = manager.Provider.Name;
Tree.BindOnServer =
true
;
Tree.DataFieldName =
"business_service"
;
Tree.WebServiceUrl =
"~/Sitefinity/Services/Taxonomies/HierarchicalTaxon.svc"
;
Tree.DataBind();
protected
override
bool
ValidateInput()
bool
valid =
base
.ValidateInput();
if
(valid)
//lets validate the rest of our custom fields.
if
(!Tree.IsValid())
return
false
;
if
(!Gender.IsValid())
return
false
;
return
valid;
protected
HierarchicalTaxonField Tree
get
return
this
.Container.GetControl<HierarchicalTaxonField>(
"taxonomy"
,
true
);
protected
ChoiceField Gender
get
return
this
.Container.GetControl<ChoiceField>(
"gender"
,
true
);
i am trying to do the same functionality (using my converted vb site). i need to send email to admin for all reg. the admin will approve/disapprove.
I created the class below, however it's not being called once i test the reg. form. i added ~/lelcode/CustomRegistration.vb to the control section. what am i doing wrong? Please be basic i'm new to sf. Version 5.1
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports Telerik.Sitefinity.Web.UI
Imports Telerik.Sitefinity.Security.Web.UI
Namespace SitefinityWebApp.UserControls
Public Class CustomRegistration
Inherits RegistrationForm
Protected Overrides Sub SendRegistrationConfirmationEmail(user As Telerik.Sitefinity.Security.Model.User, userManager As Telerik.Sitefinity.Security.UserManager)
user.Email = "admin@mymail.com"
MyBase.SendRegistrationConfirmationEmail(user, userManager)
End Sub
End Class
End Namespace
Hello Doug,
Thank you for using our services.
Can you please let us knwo if when registering your custom control you've used a relative path or the CLR type of the control? Please note that in order to override the base RegistrationForm methods you need to create a custom control (class inheriting from RegistrationForm, not a Web UserControl whose code-behind inherits from RegistrationForm) and register it as per the instructions provided on this page from our documentation.
Regards,
Boyan Barnev
the Telerik team