移动列表框中的项目并在服务器端捕获

本文关键字:服务器端 项目 列表 移动 | 更新日期: 2023-09-27 18:00:33

我正试图使用jQuery代码在两个列表框之间移动项目

function move_list_items(sourceid, destinationid) {
    $("#" + sourceid + "  option:selected").appendTo("#" + destinationid);
}
//this will move all selected items from source list to destination list
function move_list_items_all(sourceid, destinationid) {
    $("#" + sourceid + " option").appendTo("#" + destinationid);
}

我的列表框代码是这样的

<asp:ListBox ID="lstFirst" runat="server" Width="300px" Height="250px" SelectionMode="Multiple"></asp:ListBox>
    <tr>
        <td>
            <p align="center">
                <input id="btnRight" type="button" value=">" onclick="move_list_items('lstFirst','lstSecond');" />
            </p>
            <p align="center">
                <input id="btnLeft" type="button" value="<" onclick="move_list_items('lstSecond','lstFirst');" />
            </p>
            <p align="center">
                <input id="btnRightAll" type="button" value=">>" onclick="move_list_items_all('lstFirst','lstSecond');" />
            </p>
            <p align="center">
                <input id="btnLeftAll" type="button" value="<<" onclick="move_list_items_all('lstSecond,'lstFirst');" />
            </p>
        </td>
    </tr>
<asp:ListBox ID="lstSecond" runat="server" Width="300px" Height="250px" SelectionMode="Multiple"></asp:ListBox>

项目移动良好,但我无法使用lstSecond.items访问lstSecond列表框中移动的项目。计数为零。如何从codebehind访问添加的项目以进行保存?

移动列表框中的项目并在服务器端捕获

问题是你的服务器端控件(ListBox)不会从客户端html读取它的状态,它总是在服务器端填充(从Markup或Code-behind)。

因此,实现目标的一种方法是,一旦您通过jQuery更改项目,就将(每个列表框的)项目存储在客户端的隐藏字段中。然后在服务器端,您需要根据隐藏字段中显示的值(如果有的话)填充列表框。