ASP.NET中的ListBox问题

时间:2010-08-09 10:04:33

标签: asp.net

可能是我之前问过的同样的问题,但问题是一样的,我没有找到任何解决方案所以我必须再写一次,期望这次会解决。 我的问题是我使用两个列表框和一个列表框填充通过将列表项标签放在aspx页面上的listBox1中,我想实现像两个列表框之间添加和删除的功能我的意思是从listBox1中删除一个项目应该添加到第二个并从第二个删除项目应添加到第一个。虽然我尝试了自己的但问题是在回帖后它会达到相同的条件。我已经通过使用jQuery实现了添加删除功能,但问题是在回发后它达到了相同的条件,所以我想要一个很好的解决方案,如果我实现这个,以便在回发后它保留它的价值请让我失望从这个问题。 我在Google上找到了一些解决方案,我应该创建一些其他类来扩展ListBox基类,但我无法理解,我应该如何编写代码,所以请尽可能解释我的代码。

1 个答案:

答案 0 :(得分:1)

不涉及jQuery,但所有交换都发生在客户端上,任何移动的项目仍将在回发后移动。

<select id="ListBox1" name="ListBox1" runat="server" size="5" >
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
<br />
<input class="button" onclick="moveSelectedItems(document.getElementById('ListBox1'), document.getElementById('ListBox2'));"                                         type="button" value="<"/>&nbsp;<br/>
<input class="button" onclick="moveSelectedItems(document.getElementById('ListBox2'), document.getElementById('ListBox1'));"                                         type="button" value=">"/><br/>
<select id="ListBox2" name="ListBox2" runat="server" size="5">
<option>a</option>
<option>b</option>
<option>c</option>
<option>d</option>
<option>e</option>
</select>
<asp:HiddenField runat="server" ID="ListOneHiddenField" />
<asp:HiddenField runat="server" ID="ListTwoHiddenField" />

<script type="text/javascript">
function moveSelectedItems(oListFrom, oListTo) 
{
        var oNewOption;

        // Move the item from one list to another
        oNewOption = document.createElement("OPTION");
        oListTo.options.add(oNewOption);
        oNewOption.innerText = oListFrom.options(oListFrom.selectedIndex).innerText;
        oNewOption.value = oListFrom.options(oListFrom.selectedIndex).value;
        oListFrom.options.remove(oListFrom.selectedIndex);

        // Persist the pipe-separated set of items in each listbox to a hidden field
        document.getElementById('ListOneHiddenField').value = "";

        for (var j = 0; j < document.getElementById('ListBox1').options.length; j++)
            document.getElementById('ListOneHiddenField').value += document.getElementById('ListBox1').options(j).value + "|";

        document.getElementById('ListTwoHiddenField').value = "";

        for (var j = 0; j < document.getElementById('ListBox2').options.length; j++)
            document.getElementById('ListTwoHiddenField').value += document.getElementById('ListBox2').options(j).value + "|";
}
</script>


protected void Page_Load(object sender, EventArgs e)
{
    string[] listItems;

    if (IsPostBack)
    {
        // Clear the ListBox
        ListBox1.Items.Clear();

        // Split the set of items into an array
        listItems = ListOneHiddenField.Value.Split("|".ToCharArray());

        // Rebuild the set of list items
        foreach (string listItem in listItems)
        {
            if (!string.IsNullOrEmpty(listItem))
            {
                ListBox1.Items.Add(new ListItem(listItem, listItem));
            }
        }

        // Rinse and repeat
        ListBox2.Items.Clear();

        listItems = ListTwoHiddenField.Value.Split("|".ToCharArray());

        foreach (string listItem in listItems)
        {
            if (!string.IsNullOrEmpty(listItem))
            {
                ListBox2.Items.Add(new ListItem(listItem, listItem));
            }
        }
    }
}