0

我正在尝试将基于角色的功能添加到我的基于 asp.net 网络表单的网站中。

我使用 ASP.Net 配置创建了三个角色

  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>

工作代码:我尝试了类似的代码,但由于某些原因它不起作用..下面的代码正在工作......

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

工作代码,我之前尝试过类似的代码,但由于某种原因它不起作用。经过多次更改并环顾四周后,我对代码进行了少量更改,现在它开始工作正常。

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.DataBind();
roleDropDownList.SelectedValue="admin value";
于 2013-06-12T12:08:40.117 回答
0

我认为这是它出错了

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

如您所见,您选择了 Rolename 两次。

尝试这个:

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