views:

861

answers:

3

Hi all,

I am rather confused I have got a createuser wizard control that I use with my custom user classes and role classes.

I have a step so that the admin user can create new users and assign them their roles. The OnActivate method is firing but the OnDeactivate is not. I have put break points on both methods and confirmed that it is not going into the method at all. I have included both the markup and code behind below, (sorry it is a bit long I did not want to cut anything out incase that was the problem):

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" ContinueDestinationPageUrl="~/admin/default.aspx"
    DisableCreatedUser="false" Font-Names="Verdana" BackColor="white" Font-Size="10pt"
    BorderWidth="1px" BorderColor="#CCCC99" BorderStyle="Solid" CompleteSuccessText="The account has been successfully created."
    UnknownErrorMessage="The account was not created. Please try again.">
    <WizardSteps>
        <asp:CreateUserWizardStep ID="CreateUserWizardStep2" runat="server" Title="Step 1: Basic User Information"
            OnDeactivate="UpdateCurrentLvl_OnDeactivate">
            <ContentTemplate>
                <table style="font-size: 10pt; font-family: Verdana" border="0" width="400">
                    <tr>
                        <td style="font-weight: bold; color: white; background-color: #6b696b" align="center"
                            colspan="2">
                            Create Your UserID
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">UserID:</asp:Label></td>
                        <td>
                            <asp:TextBox ID="UserName" runat="server"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ToolTip="User Name is required."
                                ErrorMessage="User Name is required." ValidationGroup="CreateUserWizard1" ControlToValidate="UserName">
                                    *</asp:RequiredFieldValidator>
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label></td>
                        <td>
                            <asp:TextBox ID="Password" runat="server" TextMode="Password"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ToolTip="Password is required."
                                ErrorMessage="Password is required." ValidationGroup="CreateUserWizard1" ControlToValidate="Password">
                                    *</asp:RequiredFieldValidator>
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            <asp:Label ID="ConfirmPasswordLabel" runat="server" AssociatedControlID="ConfirmPassword">Re-Type Password:</asp:Label>
                        </td>
                        <td>
                            <asp:TextBox ID="ConfirmPassword" runat="server" TextMode="Password"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="ConfirmPasswordRequired" runat="server" ToolTip="Confirm Password is required."
                                ErrorMessage="Confirm Password is required." ValidationGroup="CreateUserWizard1"
                                ControlToValidate="ConfirmPassword">
                                    *</asp:RequiredFieldValidator>
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            <asp:Label ID="EmailLabel" runat="server" AssociatedControlID="Email">Email:</asp:Label>
                        </td>
                        <td>
                            <asp:TextBox ID="Email" runat="server"></asp:TextBox>                                
                        </td>
                    </tr>
                </table>
                <br />
                <br />
                <table style="font-size: 10pt; font-family: Verdana" border="0" width="400">
                    <tr>
                        <td style="font-weight: bold; color: white; background-color: #6b696b" align="center"
                            colspan="2">
                            If You Forget Your Password
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            Security Question:
                        </td>
                        <td>
                            <asp:DropDownList ID="Question" runat="server" Width="200">
                                <asp:ListItem Text="[Select a Question]" />
                                <asp:ListItem Text="Favorite Pet" />
                                <asp:ListItem Text="Mother's Maiden Name" />
                                <asp:ListItem Text="Who was your childhood hero?" />
                                <asp:ListItem Text="Your favorite pasttime?" />
                            </asp:DropDownList>
                            <asp:RequiredFieldValidator ID="QuestionRequired" runat="server" InitialValue="[Select a Question]"
                                ControlToValidate="Question" ErrorMessage="Select a Security Question" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                        </td>
                    </tr>
                    <tr>
                        <td align="right" width="170">
                            Your Answer:
                        </td>
                        <td>
                            <asp:TextBox ID="Answer" runat="server"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="AnswerRequired" runat="server" ControlToValidate="Answer"
                                ErrorMessage="RequiredFieldValidator" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                        </td>
                    </tr>
                </table>
                <br />
                <br />
                <table style="font-size: 10pt; font-family: Verdana" border="0" width="400">
                    <tr>
                        <td style="font-weight: bold; color: white; background-color: #6b696b" align="center"
                            colspan="2">
                            Help Us Customize Your Experience
                        </td>
                    </tr>
                    <tr>
                        <td align="right" width="170">
                            Set Level of the user:</td>
                        <td>
                            <asp:DropDownList ID="cLevel" runat="server">
                                <asp:ListItem Text="[Select a Level]" />
                                <asp:ListItem Text="1" />
                                <asp:ListItem Text="2" />
                                <asp:ListItem Text="3" />
                            </asp:DropDownList>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" InitialValue="[Select a Level]"
                                ControlToValidate="cLevel" ErrorMessage="Select a Level" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                        </td>
                    </tr>
                    <tr>
                        <td align="center" colspan="2">
                            <asp:CompareValidator ID="PasswordCompare" runat="server" ErrorMessage="The Password and Confirmation Password must match."
                                ValidationGroup="CreateUserWizard1" ControlToValidate="ConfirmPassword" ControlToCompare="Password"
                                Display="Dynamic">
                            </asp:CompareValidator>
                        </td>
                    </tr>
                    <tr>
                        <td style="color: red" align="center" colspan="2">
                            <asp:Literal ID="ErrorMessage" runat="server" EnableViewState="False"></asp:Literal>
                        </td>
                    </tr>
                </table>
            </ContentTemplate>
        </asp:CreateUserWizardStep>
        <asp:WizardStep runat="server" ID="wsAssignUserToRoles" AllowReturn="False" Title="Step 2: Assign User To Roles"
            OnActivate="AssignUserToRoles_Activate" OnDeactivate="AssignUserToRoles_Deactivate">
            <table>
                <tr>
                    <td>
                        Select one or more roles for the user:</td>
                </tr>
                <tr>
                    <td>
                        <asp:ListBox ID="AvailableRoles" runat="server" SelectionMode="Multiple" Height="104px"
                            Width="264px"></asp:ListBox>
                    </td>
                </tr>
            </table>
        </asp:WizardStep>
        <asp:CompleteWizardStep ID="CompleteWizardStep2" runat="server">
        </asp:CompleteWizardStep>
    </WizardSteps>
    <TitleTextStyle Font-Bold="True" BackColor="#6B696B" ForeColor="White"></TitleTextStyle>
</asp:CreateUserWizard>

The code behind is:

public partial class admin_createuser : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
    // Create an empty Profile for the newly created user
    ProfileCommon p = (ProfileCommon)ProfileCommon.Create(CreateUserWizard1.UserName, true);

    // Populate some Profile properties off of the create user wizard
    p.CurrentLevel = Int32.Parse(((DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("clevel")).SelectedValue);

    // Save profile - must be done since we explicitly created it
    p.Save();
}

// Activate event fires when the user hits "next" in the CreateUserWizard
public void AssignUserToRoles_Activate(object sender, EventArgs e)
{
    // Databind list of roles in the role manager system to a listbox in the wizard
    AvailableRoles.DataSource = Roles.GetAllRoles(); ;
    AvailableRoles.DataBind();
}

// Deactivate event fires when user hits "next" in the CreateUserWizard 
public void AssignUserToRoles_Deactivate(object sender, EventArgs e)
{
    // Add user to all selected roles from the roles listbox
    for (int i = 0; i < AvailableRoles.Items.Count; i++)
    {
        if (AvailableRoles.Items[i].Selected == true)
            Roles.AddUserToRole(CreateUserWizard1.UserName, AvailableRoles.Items[i].Value);
    }
}

//set the user level to the value set in the form as it has been inserted into the DB at this point.
public void UpdateCurrentLvl_OnDeactivate(object sender, EventArgs e)
{
    int level = Int32.Parse(((DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("clevel")).SelectedValue);
    MyMembershipUser myUser = (MyMembershipUser)Membership.GetUser(CreateUserWizard1.UserName);
    myUser.CurrentLVL = level;
    Membership.UpdateUser(myUser);
}

}

A: 

Well I seem to have found "an" answer... no idea why this would be the case.

I had the create user wizard page under /admin/createuser.aspx. When I put this in the root of the website ie.. /createuser.aspx it all worked!!!!

can't explain it but it seemed to fix the problem.. very odd!

..... edit

I spoke too soon. It seems to be a permissions thing. I think it wants to log me (the user who is creating another account) out and log in the new user, who is not in any groups yet. This means they can not access any page that has security on it in the web.config which mine do.

question is how can I stop the person being logged out and give the new user permissions?

My ultimate solution was to use this statement in the CreateUserWizard control:

LoginCreatedUser="false"

It simply stopped the user from being logged in and removed any worries of the permissions issues as the currently logged in user had to have permissions for that page in the first place.

Jon
A: 

Thanks for posting this. I was beginning to pull my hair out.

A: 

Thanks that last post was just what I needed. Tried to give u a vote but I dont have enough credits.