【问题标题】:Why is my drop down list only selecting the first item in the list?为什么我的下拉列表只选择列表中的第一项?
【发布时间】:2011-06-18 18:26:26
【问题描述】:

我正在为一个朋友制作一个电子商务网站,我希望它尽可能具有可扩展性。我假设在某个时候他们的社区将增长到压倒性的数量,他们最终将需要任命新的管理员。我不希望他们来找我配置 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);

    }
}

【问题讨论】:

    标签: asp.net drop-down-menu


    【解决方案1】:

    您是否正在填充 Page_Load 中的列表?此症状的一个常见原因是列表在回发时被重新填充,因此默认为第一项。这通常可以通过将列表填充代码包装在回发检查中来避免:

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

    请注意,当回发发生时,Page_Load 会在点击事件处理程序被调用之前被调用。

    【讨论】:

    • 哦,哇。谢谢。放置一个 ddl.items.clear 并在页面加载中重新填充它,甚至没有考虑它会导致问题。感谢您的快速回答。
    猜你喜欢
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多