ASP:ListBox - postback 后没有选定的项目?

4

我有以下标记:

<tr>
    <td valign="top" align="left">
        <asp:Label ID="Label1" runat="server" Text="Available Roles" />
        <br />
        <asp:ListBox ID="availableRolesListBox" runat="server" SelectionMode="Multiple" Width="100px" Rows="10" AutoPostBack="false" />
    </td>
    <td valign="top" align="center">
        &nbsp;
        <br />
        <asp:Button ID="addToRole" runat="server" Text="--->" OnClick="addToRole_Click" />
        <br />
        <asp:Button ID="removeFromRole" runat="server" Text="<---" OnClick="removeFromRole_Click" />
    </td>
    <td valign="top" align="left">
        <asp:Label ID="Label2" runat="server" Text="User In Roles" />
        <br />
        <asp:ListBox ID="userInRolesListBox" runat="server" SelectionMode="Multiple" Width="100px" Rows="10" AutoPostBack="false" />
    </td>
</tr>

在代码后台中,可以这样写:

protected void addToRole_Click(object sender, EventArgs e)
{
    // Add user to the selected role...
    foreach (ListItem myItem in availableRolesListBox.Items)
    {
        if (myItem.Selected)
        {
            Roles.AddUserToRole(userListBox.SelectedItem.Value, myItem.Text);
        }
    }

    Refresh();
}

当我进入代码后台时,没有任何项目被选中!我忘了什么?
2个回答

8

你是否每次都重新绑定availableRolesListBox,而不是在if(!IsPostback)中绑定?


糟糕!你说中了。我的Refresh()方法(重新填充大多数控件)在!Page.PostBack之外。<arggghhhh/>谢谢! - Keith Barrows
不要难过 - 这是一个容易犯的错误! - RichardOD
通常我必须在每个请求上创建动态控件(以便它们可以接收回发值)。但在这种情况下,我仍然需要创建列表框,但我需要将其保留为空(将填充它的代码移动到!IsPostBack部分)。谢谢。 - AaronLS

2
您可以检查一些事情。
检查是否在每次 postback 后重新加载了 listbox。此外,您可能还想确保父容器没有使用 ViewStateEnabled="false"
除此之外,您的代码看起来应该是没问题的,如果需要更多的代码或信息进行调试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接