views:

608

answers:

1

Users are created with a standard SQLMemberShipProvider.

I've tried catching MembershipCreationStatus as well as exceptions, and when I debug the code I do get to the method that sets the messages. I set them using the properties on the CreateUserWizardControl, but when the page is rendered the default values are displayed; not the (custom) messages I just set.

The wizard I'm working on has just one step but I really would like to know what I'm doing wrong. I've spent more than a whole day on trying to get this wizardthingie to behave.

Looking for some help or guidance.

Thanks, Adam

<asp:CreateUserWizard ID="createUserWizard" runat="server" 
  ContinueDestinationPageUrl="/user/profile/" 
  CreateUserButtonText="Continue" RequireEmail="False" ActiveStepIndex="0">
  <WizardSteps>
   <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server" Title="Account details">
 <ContentTemplate>
  <fieldset>
   <legend>Account details</legend>

   <div>
    <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Desired username:</asp:Label>
    <asp:TextBox ID="UserName" runat="server"></asp:TextBox>
   </div>
   <div>
    <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Desired password:</asp:Label>
    <asp:TextBox ID="Password" runat="server" TextMode="Password"></asp:TextBox>
    <asp:RequiredFieldValidator ID="PasswordRequiredValidator" runat="server" ControlToValidate="Password" 
  Display="Dynamic" EnableClientScript="false" ValidationGroup="createUserWizard">*</asp:RequiredFieldValidator>
   </div>
   <div>
    <asp:Label ID="ConfirmPasswordLabel" runat="server" AssociatedControlID="ConfirmPassword">Confirm password:</asp:Label>
    <asp:TextBox runat="server" ID="ConfirmPassword" TextMode="Password"></asp:TextBox>
   </div>
  </fieldset>

  <div class="errors">
   <asp:ValidationSummary runat="server" ID="validationSummary" 
    DisplayMode="BulletList" ValidationGroup="createUserWizard" 
    HeaderText="<b>Please correct the following fields:</b>" 
    ShowMessageBox="False" ShowSummary="true" />

   <asp:Literal ID="ErrorMessage" runat="server" EnableViewState="false" />
  </div>
 </ContentTemplate>
   </asp:CreateUserWizardStep>
  </WizardSteps>
 </asp:CreateUserWizard>

Here's the codebehind (sections of interest):

 protected override void OnInit(EventArgs e)
 {
  base.OnInit(e);

  createUserWizard.CreatedUser += OnUserCreated;
  createUserWizard.CreateUserError += OnError;
  createUserWizard.NextButtonClick += OnNextButtonClick;
 }

 protected void OnUserCreated(object sender, EventArgs e)
 {
  //Add user to group and redirect to destination page.
 }

 private void OnNextButtonClick(object sender, WizardNavigationEventArgs e)
 {
  CreateUserWizard wizard = sender as CreateUserWizard;

  if (wizard.ActiveStepIndex == 0)
  {
   try 
   {
 if (Membership.ValidateUser(createUserWizard.UserName, createUserWizard.Password))
 {
  MembershipUser newUser = Membership.CreateUser(
   createUserWizard.UserName,
   createUserWizard.Password);

  //add user to group and redirect to destination page
 }
   }
   catch (MembershipCreateUserException ex)
   {
 SetFailureMessage(ex.StatusCode);
 e.Cancel = true;
   }
  }
 }

 public void SetFailureMessage(MembershipCreateStatus status)
 {
  switch (status)
  {
   case MembershipCreateStatus.DuplicateUserName:
 createUserWizard.DuplicateUserNameErrorMessage = "Username is not available."; //the string is fetched from a database.
 break;

   case MembershipCreateStatus.InvalidPassword:
 createUserWizard.InvalidPasswordErrorMessage = "Password is not secure enough"; //the string is fetched from a database.
   ...
  }
 }

 private void OnError(object sender, CreateUserErrorEventArgs e)
 {
  if (e.CreateUserError == MembershipCreateStatus.InvalidPassword)
  {
   CreateUserWizard wizard = sender as CreateUserWizard;
   wizard.InvalidPasswordErrorMessage = "Password is not secure enough"; //the string is fetched from a database.
   ...
  }
 }
A: 

Why are you changing the value when en error occurs if you are only using static strings?

The properties are exposed on the properties panel for the control, if you set the values there everything should work.

Serge