为什么我的下拉列表只选择列表中的第一项?

时间:2011-06-18 18:26:27

标签: asp.net drop-down-menu

我正在为朋友制作一个电子商务网站,我希望尽可能地扩展它。我假设他们的社区将在某种程度上成长为压倒性的数字,他们最终将需要指定新的管理员。我不希望他们来找我配置WSAT。 我已经放入了两个下拉列表和一个按钮。 一个用户拉取用户并将用户名与他们所在的角色连接起来。第二个用户名拉取所有角色。 该按钮可将所选用户从其所在位置移除,并将其置于下拉列表中选定的角色中。

    <asp:DropDownList ID="ddlUsers" runat="server" AppendDataBoundItems="True" 
    DataSourceID="dsMembers" DataTextField="Info" DataValueField="Username">
    <asp:ListItem>--Select a User --</asp:ListItem>
    </asp:DropDownList>
    &nbsp;
    <asp:DropDownList ID="ddlRoles" runat="server" AppendDataBoundItems="True" 
    DataSourceID="dsRoles" DataTextField="RoleName" DataValueField="RoleId" 
    style="margin-bottom: 0px">
    <asp:ListItem>--Select Privilege--</asp:ListItem>
    </asp:DropDownList>
    &nbsp;<asp:LinkButton ID="lbtnChangeRole" runat="server" 
    onclick="lbtnChangeRole_Click">Change Role</asp:LinkButton>

但是,每次单击按钮时,无论我选择哪一个,它都会自动选择列表中的第一个用户。

这是背后的代码。

protected void lbtnChangeRole_Click(object sender, EventArgs e)
{
    string user = ddlUsers.SelectedValue.ToString();
    string role = ddlRoles.SelectedItem.ToString();

    string currentRole = Roles.GetRolesForUser(user)[0];
    //check to see if the user is already in role

    if (!Roles.IsUserInRole(user, role))
    {
        Roles.AddUserToRole(user, role);
        Roles.RemoveUserFromRole(user, currentRole);

    }
}

1 个答案:

答案 0 :(得分:5)

您是否在Page_Load中填充了列表?此症状的常见原因是列表正在回发后重新填充,因此默认为第一个项目。通常通过将列表填充代码包装在对帖子的检查中来避免这种情况:

if (!IsPostBack)
{
    // populate the drop down lists, and anything else for loading the page.
}

请注意,发布回发时,在调用click事件处理程序之前调用Page_Load。