0

我有两个列表框,我试图将多个值从一个传递到另一个。asp.net 代码

<asp:UpdatePanel ID="userButtonPanel" runat="server" UpdateMode="Conditional">
                                <ContentTemplate>
                                    <asp:LinkButton Text=">>" ID="lbtn_add" CssClass="button advButtons addRemButton"
                                        runat="server" OnClick="addMappedUser_Click" />
                                    <asp:LinkButton Text="<<" ID="lbtn_remove" CssClass="button advButtons addRemButton"
                                        runat="server" OnClick="removeMappedUser_Click" />
                                </ContentTemplate>
                            </asp:UpdatePanel>
                        </div>
                        <div>
                            <asp:Label ID="lbl_MappedUSers" Text="Mapped Users" runat="server" />
                            <asp:ListBox ID="listMappedUsers" runat="server" SelectionMode="Multiple" CssClass="listboxMappedUsers"  />
                        </div>
                    </div>
                </div>
                <input id="cbUserList" type="hidden" runat="server" value="" />
                <input id="cbUserRoleID" type="hidden" runat="server" value="" />
            </ContentTemplate>
        </asp:UpdatePanel>

在单击事件时,addMappedUser_Click我评估 listAllUsers 列表框以查看选择了哪些项目并创建这些项目的列表

protected void addMappedUser_Click(object sender, EventArgs e)
        {
            List<ListItem> selectedItems = listAllUsers.Items.Cast<ListItem>().Where(i => i.Selected).ToList();
            List<AddedUsers> newusers = new List<AddedUsers>();
            foreach (var item in selectedItems)
            {
                AddedUsers au = new AddedUsers();
                au.UserID = item.Value;
                au.UserName = item.Text;
                newusers.Add(au);
            }

            MoveSelectedItems(newusers, listAllUsers);
        }

创建该列表后,将其传递给MoveSelectedItems Method

protected void MoveSelectedItems(List<AddedUsers> from, ListBox to)
        {

            if (from.Count == 0)
            {
                return;
            }

            SecurityUserRole sur = new SecurityUserRole();

            ListItem item = new ListItem();
            foreach (var i in from)
            {
                item.Value = i.UserID;
                item.Text = i.UserName;             
                if (listAllUsers.Items.Contains(item))
                {
                    listAllUsers.Items.Remove(item);
                    listMappedUsers.Items.Add(item);
                }  

                sur.SecurityUserId = Convert.ToInt32(i.UserID);
                sur.SecurityRoleId = Convert.ToInt32(RoleID);
                MappedUser.Add(sur);
                Session["MappedUser"] = MappedUser;
                checkMappingButtons(listMappedUsers, listAllUsers);
                editUserUpdatePanel.Update();
            }
        }

我遇到困难的地方是将用户添加到第二个列表框(listMappedUsers.Items.Add)当我设置断点时,我可以看到每个值都通过(例如“201”、“202”、“203” ) 但是,当更新面板更新时,列表框将仅列出 203 个 3 次。

有人可以帮助我了解我缺少什么以及为什么最后一个值是列表框中出现的唯一值而不是以前的前辈?

提前致谢,

4

1 回答 1

2

在你的最后一段代码中,你需要ListItem在你的foreach. 就像现在一样,您itemforeach.

protected void MoveSelectedItems(List<AddedUsers> from, ListBox to)
    {

        if (from.Count == 0)
        {
            return;
        }

        SecurityUserRole sur = new SecurityUserRole();

        ListItem item;
        foreach (var i in from)
        {
            item = new ListItem();
            item.Value = i.UserID;
            item.Text = i.UserName;             
            if (listAllUsers.Items.Contains(item))
            {
                listAllUsers.Items.Remove(item);
                listMappedUsers.Items.Add(item);
            }  

            sur.SecurityUserId = Convert.ToInt32(i.UserID);
            sur.SecurityRoleId = Convert.ToInt32(RoleID);
            MappedUser.Add(sur);
            Session["MappedUser"] = MappedUser;
            checkMappingButtons(listMappedUsers, listAllUsers);
            editUserUpdatePanel.Update();
        }
    }
于 2012-12-11T21:50:50.137 回答