2009-02-05 6 views
0

Je suis plutôt confus J'ai un contrôle d'assistant createuser que j'utilise avec mes classes d'utilisateurs et classes de rôles personnalisées.C# createuser wizard OnDeactivate pas de tir

J'ai une étape pour que l'utilisateur admin puisse créer de nouveaux utilisateurs et leur assigner leurs rôles. La méthode OnActivate est en cours d'exécution mais l'option OnDeactivate ne l'est pas. J'ai mis des points de rupture sur les deux méthodes et confirmé que cela ne va pas dans la méthode du tout. J'ai inclus à la fois le balisage et le code derrière ci-dessous, (désolé il est un peu long je ne voulais pas couper quoi que ce soit Incase qui était le problème):

<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> 

Le code est derrière:

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

}

Répondre

0

Eh bien, je semble avoir trouvé « une » réponse ... aucune idée pourquoi ce serait le cas. J'ai créé la page de l'assistant de création d'utilisateur sous /admin/createuser.aspx. Quand je mets cela à la racine du site, c'est à dire .. /createuser.aspx tout a fonctionné !!!!

ne peut pas l'expliquer mais il a semblé résoudre le problème .. très étrange!

..... modifier

j'ai parlé trop tôt. Cela semble être une chose d'autorisations. Je pense qu'il veut me connecter (l'utilisateur qui crée un autre compte) et connectez-vous le nouvel utilisateur, qui n'est pas encore dans les groupes. Cela signifie qu'ils ne peuvent accéder à aucune page sécurisée dans le fichier web.config que le mien fait.

question est comment puis-je arrêter la personne déconnectée et donner les autorisations du nouvel utilisateur?

Ma solution ultime était d'utiliser cette déclaration dans le contrôle CreateUserWizard:

LoginCreatedUser="false" 

Il a tout simplement cessé l'utilisateur d'être connecté et supprimé les soucis des problèmes d'autorisations comme utilisateur actuellement connecté devait avoir autorisations pour cette page en premier lieu.

+0

Aurait aussi aimé voter pour votre réponse, mais je suis nouveau sur le site ... et je n'ai aucun point – AngelaG