下拉总是在asp.net Web表单中获得第一个值

时间:2013-06-12 10:54:37

标签: asp.net asp.net-membership webforms

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

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

  1. 管理
  2. 访客
  3. 编辑
  4. 我正在使用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'

    我很感激这方面的帮助。

    更新:下拉正确填写

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

3 个答案:

答案 0 :(得分:0)

绑定下拉列表后

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

答案 1 :(得分: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;

答案 2 :(得分: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);

}