0

複数の値を一方から他方に渡そうとしている2つのリストボックスがあります。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();
            }
        }

行き詰まっているのは、2番目のリストボックス(listMappedUsers.Items.Add)にユーザーを追加することです。ブレークポイントを設定すると、各値が通過するのを確認できます(たとえば、「201」、「202」、「203」)。 )ただし、updatepanelが更新されると、リストボックスには203が3回だけリストされます。

誰かが私が欠けているものと、リストボックスに表示される唯一の値が前の値である理由を理解するのを手伝ってもらえますか?

前もって感謝します、

4

1 に答える 1

2

コードの最後のセクションでは、で新しいをインスタンス化する必要がありListItemますforeach。現在のように、で同じものitemを何度も編集していforeachます。

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 に答える