2011-12-29 10 views
0

新しいユーザーを登録するためにasp.netアプリケーションで組み込みのregisterモジュールを使用しています。 登録時にユーザーのロールを設定しようとしていますが、何らかの理由でバックエンドコードのテキストボックスコントロールにアクセスできないため、新しいユーザーを選択したロールに追加することができません。コードあまりにも、それはコントロールが見つからないことを意味し、nullを返します。登録時にユーザーをロールに追加する

TextBox txtUsername = (TextBox)Page.FindControl("UserName"); 
      Roles.AddUserToRole(txtUsername.Text, "User"); 

はまた、ここではレジスタモジュールのためのHTMLマークアップです:

<asp:CreateUserWizardStep ID="RegisterUserWizardStep" runat="server"> 
       <ContentTemplate> 
        <h2> 
         Create a New Account 
        </h2> 
        <p> 
         Use the form below to create a new account. 
        </p> 
        <p> 
         Passwords are required to be a minimum of <%= Membership.MinRequiredPasswordLength %> characters in length. 
        </p> 
        <span class="failureNotification"> 
         <asp:Literal ID="ErrorMessage" runat="server"></asp:Literal> 
        </span> 
        <asp:ValidationSummary ID="RegisterUserValidationSummary" runat="server" CssClass="failureNotification" 
         ValidationGroup="RegisterUserValidationGroup"/> 
        <div class="accountInfo"> 
         <fieldset class="register"> 
          <legend>Account Information</legend> 
          <p> 
           <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">User Name:</asp:Label> 
           <asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox> 
           <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName" 
            CssClass="failureNotification" ErrorMessage="User Name is required." ToolTip="User Name is required." 
            ValidationGroup="RegisterUserValidationGroup">*</asp:RequiredFieldValidator> 
          </p> 
          <p> 
           <asp:Label ID="EmailLabel" runat="server" AssociatedControlID="Email">E-mail:</asp:Label> 
           <asp:TextBox ID="Email" runat="server" CssClass="textEntry"></asp:TextBox> 
           <asp:RequiredFieldValidator ID="EmailRequired" runat="server" ControlToValidate="Email" 
            CssClass="failureNotification" ErrorMessage="E-mail is required." ToolTip="E-mail is required." 
            ValidationGroup="RegisterUserValidationGroup">*</asp:RequiredFieldValidator> 
          </p> 
          <p> 
           <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label> 
           <asp:TextBox ID="Password" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox> 
           <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password" 
            CssClass="failureNotification" ErrorMessage="Password is required." ToolTip="Password is required." 
            ValidationGroup="RegisterUserValidationGroup">*</asp:RequiredFieldValidator> 
          </p> 
          <p> 
           <asp:Label ID="ConfirmPasswordLabel" runat="server" AssociatedControlID="ConfirmPassword">Confirm Password:</asp:Label> 
           <asp:TextBox ID="ConfirmPassword" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox> 
           <asp:RequiredFieldValidator ControlToValidate="ConfirmPassword" CssClass="failureNotification" Display="Dynamic" 
            ErrorMessage="Confirm Password is required." ID="ConfirmPasswordRequired" runat="server" 
            ToolTip="Confirm Password is required." ValidationGroup="RegisterUserValidationGroup">*</asp:RequiredFieldValidator> 
           <asp:CompareValidator ID="PasswordCompare" runat="server" ControlToCompare="Password" ControlToValidate="ConfirmPassword" 
            CssClass="failureNotification" Display="Dynamic" ErrorMessage="The Password and Confirmation Password must match." 
            ValidationGroup="RegisterUserValidationGroup">*</asp:CompareValidator> 
          </p> 
         </fieldset> 
         <p class="submitButton"> 
          <asp:Button ID="CreateUserButton" runat="server" CommandName="MoveNext" Text="Create User" 
           ValidationGroup="RegisterUserValidationGroup"/> 
         </p> 
        </div> 
       </ContentTemplate> 
       <CustomNavigationTemplate> 
       </CustomNavigationTemplate> 
      </asp:CreateUserWizardStep> 

私が何をやっているすべてのアイデア違う? ありがとう、Laziale

+0

私はあなたにもそのコントロールを見つけることができると仮定しています、そのWebフォーム上のコントロールがたくさんあります。 forループまたはforeachループを探しています – MethodMan

答えて

2

あなたのUserNameテキストボックスがページの直接の子ではないためです。多くのコントロール内にネストされています。ここでは、再帰的に、あなたはUserNameテキストボックスのインスタンスを取得するには、ページ内のすべてのコントロールを検索することができますどのように、です:

private TextBox getUserNameTextBox(ControlCollection ctls) 
    { 
     foreach (Control c in ctls) 
     { 
      if (c is System.Web.UI.WebControls.TextBox) 
      { 
       if (c.ID == "UserName") 
        return c; 
      } 
      if (c.HasControls()) 
      { 
       getAllCtl(c.Controls); 


      } 
     } 
     return null; 
    } 

YourUserNameTextBox = getuserNameTextBox(Page.Controls); 
+0

ありがとうございました – Laziale

関連する問題