2013-06-12 29 views
0

我想将基于角色的功能添加到我的asp.net基于web表单的网站上。下拉总是在asp.net web表单中获得第一个值

我创建使用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保存为数据库中的角色,因为它是下拉列表中的第一个角色。

我不知道我在哪里做的错误或我的做法是错的我用下面的链接作为参考点

Adding roles to the 'CreateUserWizard'

我希望在这方面的帮助。

UPDATE:下拉填充正确

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

工作代码:我尝试类似的代码,它因此未对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); 

} 

回答

0

绑定下拉后

roleDropDownList.DataBind(); 
roleDropDownList.SelectedValue="admin value"; 
0

我认为这是它出错了

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

正如你所看到的,你选择了两次角色名。

试试这个:

roleDropDownList.DataTextField = "RoleName"; 
    roleDropDownList.DataValueField = "ID_RoleName"; 
'or what ever is the unique ID of the tbl is; 
+0

但是,即使我选择RoleName它仍然应该从名称下拉列表中获得名称。我的下拉列表获得正确的值检查问题更新 – Learning

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

} 
相关问题