I am attaching the code for the MembershipEditor part for one of the JobsMarket clone sites. This part is used on the registration page. Most of the code performs various housekeeping tasks - you will be using something similar to PostAccountCreationAction methods where a blog is created if the user checks the "Give me a blog" box.
<%@ Control Language="C#" AutoEventWireup="True" CodeBehind="MembershipEditor.ascx.cs" Inherits="JobsMarket.WebParts.MembershipEditor" %>
<%@ Import Namespace="MonoSoftware.MonoX.Resources"%>
<
table
cellpadding
=
"0"
cellspacing
=
"0"
class
=
"light-box register"
style
=
"padding: 2px;"
>
<
tr
>
<
td
class
=
"job-search-result-header register-title"
>
<%= Page.User.Identity.IsAuthenticated ? DefaultResources.MembershipEditor_Title_UpdateAccount : JobsMarket.Resources.DefaultResources.Registration_JobSeeker_Title %>
</
td
>
</
tr
>
<
tr
>
<
td
class
=
"register-description"
>
<%= JobsMarket.Resources.DefaultResources.Registration_JobSeeker_Description %>
<
br
/>
<%= string.Format(JobsMarket.Resources.DefaultResources.Registration_JobSeeker_NotAJobSeekerFormat, Page.ResolveUrl("/Membership/RegisterEmployer.aspx")) %>
</
td
>
</
tr
>
<
tr
>
<
td
>
<
div
class
=
"register-form"
>
<
dl
>
<
dd
style
=
"margin: 0px;"
>
<
div
id
=
"Div1"
runat
=
"server"
style
=
"margin-left: 20%; overflow: hidden;"
>
<
asp:ValidationSummary
ID
=
"validationSummary"
CssClass
=
"validation-summary"
runat
=
"server"
Style
=
"margin-bottom: 20px;"
/>
</
div
>
</
dd
>
<
dd
>
<
label
for="<%= txtUserName.ClientID %>"><%= DefaultResources.MembershipEditor_UserName %></
label
>
<
asp:Label
ID
=
"lblUserName"
runat
=
"server"
AssociatedControlID
=
"txtUserName"
></
asp:Label
>
<
asp:TextBox
ID
=
"txtUserName"
runat
=
"server"
></
asp:TextBox
>
<
asp:RequiredFieldValidator
ID
=
"vldRequiredUserName"
runat
=
"server"
ControlToValidate
=
"txtUserName"
Text
=
"!"
CssClass
=
"validator"
Display
=
"Dynamic"
/>
<
asp:CustomValidator
ID
=
"vldCustomUserName"
runat
=
"server"
ControlToValidate
=
"txtUserName"
Text
=
"!"
CssClass
=
"validator"
Display
=
"Dynamic"
/>
<
asp:RegularExpressionValidator
ID
=
"vldCleanUsername"
runat
=
"server"
ControlToValidate
=
"txtUserName"
Text
=
"!"
CssClass
=
"validator"
Display
=
"Dynamic"
ValidationExpression
=
"^[0-9a-zA-Z]+$"
></
asp:RegularExpressionValidator
>
</
dd
>
<
dd
>
<
label
for="<%= txtPassword.ClientID %>"><%= DefaultResources.MembershipEditor_Password %></
label
>
<
asp:TextBox
ID
=
"txtPassword"
runat
=
"server"
TextMode
=
"Password"
></
asp:TextBox
>
<
asp:RequiredFieldValidator
ID
=
"vldRequiredPassword"
runat
=
"server"
ControlToValidate
=
"txtPassword"
Text
=
"!"
CssClass
=
"validator"
Display
=
"Dynamic"
/>
</
dd
>
<
dd
>
<
label
for="<%= txtRepeatPassword.ClientID %>"><%= DefaultResources.MembershipEditor_RepeatPassword %></
label
>
<
asp:TextBox
ID
=
"txtRepeatPassword"
runat
=
"server"
TextMode
=
"Password"
></
asp:TextBox
>
<
asp:RequiredFieldValidator
ID
=
"vldRequiredRepeatPassword"
runat
=
"server"
ControlToValidate
=
"txtRepeatPassword"
Text
=
"!"
CssClass
=
"validator"
Display
=
"Dynamic"
/>
<
asp:CompareValidator
ID
=
"vldCompareRepeatPassword"
runat
=
"server"
ControlToValidate
=
"txtRepeatPassword"
Text
=
"!"
ControlToCompare
=
"txtPassword"
Operator
=
"Equal"
CssClass
=
"validator"
Display
=
"Dynamic"
></
asp:CompareValidator
>
</
dd
>
<
dd
>
<
label
for="<%= txtEmail.ClientID %>"><%= DefaultResources.MembershipEditor_Email %></
label
>
<
asp:TextBox
ID
=
"txtEmail"
runat
=
"server"
></
asp:TextBox
>
<
asp:RequiredFieldValidator
ID
=
"vldRequiredEmail"
runat
=
"server"
ControlToValidate
=
"txtEmail"
Text
=
"!"
CssClass
=
"validator"
Display
=
"Dynamic"
/>
<
asp:RegularExpressionValidator
ID
=
"vldRegexEmail"
runat
=
"server"
ControlToValidate
=
"txtEmail"
Text
=
"!"
CssClass
=
"validator"
Display
=
"Dynamic"
/>
</
dd
>
<
asp:PlaceHolder
ID
=
"plhBlog"
runat
=
"server"
>
<
dd
style
=
"margin: 0px; padding: 0px;"
>
<
label
> </
label
>
<
asp:CheckBox
ID
=
"chBlog"
runat
=
"server"
Checked
=
"true"
/>
<
label
style
=
"width: 70%; margin: 0px; padding: 0px; display: inline; text-align: left;"
for="<%= chBlog.ClientID %>"><%= JobsMarket.Resources.DefaultResources.Label_GiveMeBlog %></
label
>
</
dd
>
</
asp:PlaceHolder
>
<
asp:PlaceHolder
ID
=
"plhNewsletter"
runat
=
"server"
>
<
dd
style
=
"margin: 0px; padding: 0px;"
>
<
label
> </
label
>
<
asp:CheckBox
ID
=
"chNewsletter"
runat
=
"server"
Checked
=
"true"
/>
<
label
style
=
"width: 70%; margin: 0px; padding: 0px; display: inline; text-align: left;"
for="<%= chBlog.ClientID %>"><%= JobsMarket.Resources.DefaultResources.Label_NewsletterSubscription %></
label
>
</
dd
>
</
asp:PlaceHolder
>
<
asp:PlaceHolder
ID
=
"plhRememberMe"
runat
=
"server"
>
<
dd
style
=
"margin: 0px; padding: 0px;"
>
<
label
> </
label
>
<
asp:CheckBox
ID
=
"chkRememberMe"
runat
=
"server"
/>
<
label
style
=
"width: 70%; margin: 0px; padding: 0px; display: inline; text-align: left;"
for="<%= chkRememberMe.ClientID %>"><%= DefaultResources.MembershipEditor_RememberMe %></
label
>
</
dd
>
</
asp:PlaceHolder
>
</
dl
>
</
div
>
</
td
>
</
tr
>
<
tr
>
<
td
class
=
"job-search-result-header"
style
=
"border-top: solid 1px #DBDBDB;"
>
<
span
style
=
"float: left; font-size: 11px; margin: 7px 0px 0px 10px;"
>If you already have an account click <
a
runat
=
"server"
href
=
"/Login.aspx"
>here</
a
>.</
span
>
<
MonoX:StyledButton
ID
=
"btnCreateAccount"
runat
=
"server"
CssClass
=
"float-right"
></
MonoX:StyledButton
>
<
MonoX:StyledButton
ID
=
"btnUpdateAccount"
runat
=
"server"
CssClass
=
"float-right"
></
MonoX:StyledButton
>
</
td
>
</
tr
>
</
table
>
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
MonoSoftware.MonoX.ModuleGallery;
using
MonoSoftware.MonoX;
using
MonoSoftware.MonoX.Repositories;
using
MonoSoftware.MonoX.DAL;
using
MonoSoftware.MonoX.DAL.DatabaseSpecific;
using
MonoSoftware.MonoX.DAL.EntityClasses;
using
MonoSoftware.MonoX.DAL.FactoryClasses;
using
MonoSoftware.MonoX.DAL.HelperClasses;
using
MonoSoftware.MonoX.DAL.RelationClasses;
using
SD.LLBLGen.Pro.ORMSupportClasses;
using
MonoSoftware.Core;
using
MonoSoftware.MonoX.Caching;
using
MonoSoftware.MonoX.Utilities;
using
System.Net.Mail;
using
MonoSoftware.MonoX.Mail;
using
MonoSoftware.Web;
using
System.Web.Security;
using
JobsMarket.Repositories;
using
JobsMarket.DAL;
using
JobsMarket.DAL.DatabaseSpecific;
using
JobsMarket.DAL.EntityClasses;
using
JobsMarket.DAL.FactoryClasses;
using
JobsMarket.DAL.HelperClasses;
using
JobsMarket.DAL.RelationClasses;
using
System.Web.UI.WebControls.WebParts;
using
JobsMarket.Layers;
using
JobsMarket.Resources;
using
MonoSoftware.Web.Caching;
using
MonoSoftware.Core.Mail;
namespace
JobsMarket.WebParts
{
public
partial
class
MembershipEditor : MonoSoftware.MonoX.ModuleGallery.MembershipEditor
{
private
string
_notificationMailContent =
"User {UserName} has just created his/her account on {Portalname}."
;
public
string
NotificationMailContent
{
get
{
return
_notificationMailContent; }
set
{ _notificationMailContent = value; }
}
private
string
_notificationMailSubject =
"New user notification"
;
public
string
NotificationMailSubject
{
get
{
return
_notificationMailSubject; }
set
{ _notificationMailSubject = value; }
}
private
bool
_sendMailNotifications =
true
;
public
bool
SendMailNotifications
{
get
{
return
_sendMailNotifications; }
set
{ _sendMailNotifications = value; }
}
protected
override
void
OnInit(EventArgs e)
{
base
.OnInit(e);
if
(Page.User.Identity.IsAuthenticated)
{
string
link = String.Empty;
if
(SecurityBLL.IsEmployer() || SecurityBLL.IsCompanyAdministrator())
link = PathsJobMarket.JobsMarket.Pages.EmployerDashboard.EmployerDashboard_aspx;
else
link = PathsJobMarket.JobsMarket.Pages.UserDashboard.UserDashboard_aspx;
MonoSoftware.MonoX.Message.Show(String.Format(UserProfileResources.Register_AlReadyRegistered, UrlFormatter.ResolveServerUrl(LocalizationUtility.RewriteLink(link))), PathsJobMarket.Message_aspx);
}
((BasePage)
this
.Page).SetPageTitle(JobsMarket.Resources.DefaultResources.Registration_JobSeekerPageTitle);
vldCleanUsername.ErrorMessage = DefaultResources.UsernameValidatorErrorMessage;
}
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!
this
.IsPostBack)
chBlog.Checked =
true
;
}
protected
virtual
void
AddUserToRole(MembershipUser membershipUser)
{
//add user to the default role
Roles.AddUserToRole(membershipUser.UserName, ApplicationSettings.JobSeekersRole);
}
public
override
void
CreateAccount(MembershipUser membershipUser)
{
AddUserToRole(membershipUser);
PostAccountCreationActions(membershipUser);
SendNotifications(membershipUser);
}
protected
virtual
void
PostAccountCreationActions(MembershipUser membershipUser)
{
JobUserRepository userRepository = JobUserRepository.GetInstance();
JobUserDetailEntity userDetails = userRepository.EnsureUserDetails(
new
Guid(membershipUser.ProviderUserKey.ToString()));
userDetails.NewsletterSubscription = chNewsletter.Checked;
userDetails.Title =
string
.Empty;
userRepository.SaveEntity(userDetails);
if
(chBlog.Checked)
{
BlogEntity blog =
new
BlogEntity(GuidExtension.NewSequentialGuid());
blog.Name = membershipUser.UserName;
blog.Slug = UrlSeoOptimizer.GetOptimizedString(blog.Name);
blog.DateCreated = DateTime.Now;
blog.UserId =
new
Guid(membershipUser.ProviderUserKey.ToString());
blog.ApplicationId = MembershipRepository.GetInstance().GetApplicationId();
blog.LanguageId = LocalizationUtility.GetCurrentLanguageId();
BlogRepository.GetInstance().SaveBlog(blog,
string
.Empty);
CacheManager cacheManager = CacheManager.GetInstance();
cacheManager.RemoveAll(
"MonoXBlog"
);
cacheManager.RemoveAll(
"MonoXBlogEditors"
);
}
}
protected
virtual
void
SendNotifications(MembershipUser membershipUser)
{
if
(SendMailNotifications)
{
MailMessage mailMsg =
new
MailMessage();
mailMsg.From =
new
MailAddress(ApplicationSettings.MailFromAddress, txtUserName.Text);
mailMsg.To.Add(ApplicationSettingsJobsmarket.NotificationMailAddress);
mailMsg.Subject =
this
.NotificationMailSubject;
string
profileLink = UrlFormatter.ResolveServerUrl(RewrittenPaths.Profile.UrlPattern.Replace(
"{UserNameUrlEncoded}"
, MonoSoftware.Web.UrlEncoder.UrlEncode(txtUserName.Text), StringComparison.CurrentCultureIgnoreCase));
profileLink =
string
.Format(
"<a href=\"{0}\">{1}</a>"
, profileLink, txtUserName.Text);
string
plainTextBody =
this
.NotificationMailContent.Replace(
"{UserName}"
, profileLink, StringComparison.CurrentCultureIgnoreCase).Replace(
"{PortalName}"
, ApplicationSettings.ApplicationTitle, StringComparison.CurrentCultureIgnoreCase);
mailMsg.Body = plainTextBody;
mailMsg.IsBodyHtml =
true
;
MailSender mailSender = MailSender.GetInstance();
mailSender.SendMail(mailMsg);
}
}
}
}