0

asp.net Web フォーム ベースの Web サイトにロール ベースの機能を追加しようとしています。

ASP.Net 構成を使用して 3 つの役割を作成しました。

  1. 管理者
  2. ゲスト
  3. 編集者

私はCreateUserWizardを使用してユーザーを作成していますが、新しいユーザーを作成するときにもロールを追加できるように少し変更しました。

以下は、.aspx ファイルと .cs からのコードです。

<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" 
   oncreateduser="CreateUserWizard1_CreatedUser">
   <CreateUserButtonStyle BackColor="#2F5E8C" BorderStyle="None" ForeColor="White" 
      Height="24px" />
   <WizardSteps>
      <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
         <ContentTemplate>
            <table border=0>
               <tr>
                  <td align="right" class="tblRWHeight">
                     <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">User Name:</asp:Label>
                  </td>
                  <td class="tblRWHeight">
                     <asp:TextBox ID="UserName" CssClass="txtbox300UserM"  runat="server"></asp:TextBox>
                     <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" 
                        ControlToValidate="UserName" ErrorMessage="User Name is required." 
                        ToolTip="User Name is required." ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                  </td>
               </tr>
               <tr>
                  <td align="right" class="tblRWHeight">
                     <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
                  </td>
                  <td class="tblRWHeight">
                     <asp:TextBox ID="Password" CssClass="txtbox300UserM" runat="server" TextMode="Password"></asp:TextBox>
                     <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" 
                        ControlToValidate="Password" ErrorMessage="Password is required." 
                        ToolTip="Password is required." ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                  </td>
               </tr>
               <tr>
                  <td align="right" class="tblRWHeight">
                     <asp:Label ID="ConfirmPasswordLabel" runat="server" 
                        AssociatedControlID="ConfirmPassword">Confirm Password:</asp:Label>
                  </td>
                  <td class="tblRWHeight">
                     <asp:TextBox ID="ConfirmPassword" CssClass="txtbox300UserM" runat="server" TextMode="Password"></asp:TextBox>
                     <asp:RequiredFieldValidator ID="ConfirmPasswordRequired" runat="server" 
                        ControlToValidate="ConfirmPassword" 
                        ErrorMessage="Confirm Password is required." 
                        ToolTip="Confirm Password is required." ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                  </td>
               </tr>
               <tr>
                  <td align="right" class="tblRWHeight">
                     <asp:Label ID="EmailLabel" runat="server" AssociatedControlID="Email">E-mail:</asp:Label>
                  </td>
                  <td class="tblRWHeight">
                     <asp:TextBox ID="Email" CssClass="txtbox300UserM" runat="server"></asp:TextBox>
                     <asp:RequiredFieldValidator ID="EmailRequired" runat="server" 
                        ControlToValidate="Email" ErrorMessage="E-mail is required." 
                        ToolTip="E-mail is required." ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                  </td>
               </tr>
               <tr>
                  <td align="center" colspan="2" >
                     <asp:CompareValidator ID="PasswordCompare" runat="server" 
                        ControlToCompare="Password" ControlToValidate="ConfirmPassword" 
                        Display="Dynamic" ErrorMessage="The Password and Confirmation Password must match." 
                        ValidationGroup="CreateUserWizard1"></asp:CompareValidator>
                  </td>
               </tr>
               <tr>
                  <td align="right" class="tblRWHeight">
                     <asp:Label ID="Label1" runat="server" AssociatedControlID="Email">Add Role</asp:Label>
                  </td>
                  <td class="tblRWHeight">
                     <asp:DropDownList ID="ddRoleList" runat="server">  </asp:DropDownList>
                  </td>
               </tr>
               <tr>
                  <td align="center" colspan="2" >
                  </td>
               </tr>
               <tr>
                  <td align="center" colspan="2" style="color:Red;" >
                     <asp:Literal ID="ErrorMessage" runat="server" EnableViewState="False"></asp:Literal>
                  </td>
               </tr>
            </table>
         </ContentTemplate>
      </asp:CreateUserWizardStep>
      <asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server">
      </asp:CompleteWizardStep>
   </WizardSteps>
   <StartNavigationTemplate>
      <asp:Button ID="StartNextButton" runat="server" CommandName="MoveNext" Text="Next" style="background-color:#2F5E8C; border:0px solid #AB1B56; height:24px; color:#fff;" />
   </StartNavigationTemplate>
</asp:CreateUserWizard>

ドロップダウンを埋めて役割を保存する.CSファイルコード

DropDownList roleDropDownList;
protected void Page_Load(object sender, EventArgs e)
{
//if( (!IsPostBack))
//{
DataSet ds = new DataSet();
ds = DataProvider.Connect_Select(" select RoleName from aspnet_Roles"); 
roleDropDownList = (DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("ddRoleList");
roleDropDownList.DataSource = ds.Tables[0];
roleDropDownList.DataTextField = "RoleName";
roleDropDownList.DataValueField = "RoleName";
roleDropDownList.DataBind();
//}
}
protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
Roles.AddUserToRole(CreateUserWizard1.UserName, roleDropDownList.SelectedValue);
}

このコードを使用すると、ユーザーを保存できますがAdmin、ドロップダウンの最初にあるため、常にデータベースにロールとして保存されます。

どこで間違いを犯しているのか、またはアプローチが間違っているのかわかりません。次のリンクを参照ポイントとして使用しました

「CreateUserWizard」へのロールの追加

この点で助けていただければ幸いです。

更新: ドロップダウンが適切に入力されます

<select class="txtbox300UserM" id="MainContent_CreateUserWizard1_CreateUserStepContainer_ddRoleList" name="ctl00$MainContent$CreateUserWizard1$CreateUserStepContainer$ddRoleList">
    <option value="Admin">Admin</option>
    <option value="Guest">Guest</option>
    <option value="Editor">Editor</option>
</select>

WORKING CODE : soemの理由で機能しない前に、同様のコードを試しました..以下のコードは機能しています...

protected void Page_Load(object sender, EventArgs e)
{
   DropDownList roleDropDownList;
   if (!Page.IsPostBack)
   {
       DataSet ds = new DataSet();
       ds = DataProvider.Connect_Select("select RoleName from aspnet_Roles");
       roleDropDownList = (DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("ddRoleList");
       roleDropDownList.DataSource = ds.Tables[0];
       roleDropDownList.DataBind();
   }

}

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
    string role = ((DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("ddRoleList")).SelectedItem.Value.ToString();
    Roles.AddUserToRole(CreateUserWizard1.UserName, role);

}
4

3 に答える 3

0

ドロップダウンをバインドした後

roleDropDownList.DataBind();
roleDropDownList.SelectedValue="admin value";
于 2013-06-12T12:08:40.117 に答える
0

作業コード、以前に同様のコードを試しましたが、何らかの理由で機能しませんでした。多くの変更と見回した後、小さな変更を加えてコードを修正し、正常に動作するようになりました。

protected void Page_Load(object sender, EventArgs e)
{
   DropDownList roleDropDownList;
   if (!Page.IsPostBack)
   {
       DataSet ds = new DataSet();
       ds = DataProvider.Connect_Select("select RoleName from aspnet_Roles");
       roleDropDownList = (DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("ddRoleList");
       roleDropDownList.DataSource = ds.Tables[0];
       roleDropDownList.DataBind();
   }

}

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
    string role = ((DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("ddRoleList")).SelectedItem.Value.ToString();
    Roles.AddUserToRole(CreateUserWizard1.UserName, role);

}
于 2013-06-12T13:27:31.943 に答える
0

私はこれがうまくいかなかったと思います

roleDropDownList.DataTextField = "RoleName";
roleDropDownList.DataValueField = "RoleName";

ご覧のとおり、Rolename を 2 回選択しました。

これを試して:

    roleDropDownList.DataTextField = "RoleName";
    roleDropDownList.DataValueField = "ID_RoleName"; 
'or what ever is the unique ID of  the tbl is;
于 2013-06-12T12:31:28.863 に答える