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);
}
}
}
}