ListBox中的选定项目是否有ASP.NET集合?

Bes*_*ska 4 asp.net listbox

在我的Asp.NET网站上,我有一个允许多个选择的列表框.我希望能够提出类似的问题:

blah = myListbox.selectedItems;
Run Code Online (Sandbox Code Playgroud)

并获得在列表框中选择的项目的集合.看起来在Windows Forms世界中有一种方法,但不适用于asp.NET.有没有比这更简单的方法来迭代Items集合寻找选定的值?

Rob*_*Rob 9

这样的东西可以让你得到所选的项目:

    List<ListItem> selectedItems = new List<ListItem>();
    int[] selectedItemsIndexes = myListbox.GetSelectedIndices();
    foreach (int selectedItem in selectedItemsIndexes)
    {
        selectedItems.Add(myListbox.Items[selectedItem]);
    }
Run Code Online (Sandbox Code Playgroud)

作为扩展方法:

public static class ListBoxExtensions
{

    public static List<ListItem> GetSelectedItems(this ListBox listbox)
    {
        List<ListItem> selectedItems = new List<ListItem>();
        int[] selectedItemsIndexes = listbox.GetSelectedIndices();
        foreach (int selectedItem in selectedItemsIndexes)
        {
            selectedItems.Add(listbox.Items[selectedItem]);
        }
        return selectedItems;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以现在你可以打电话:

List<ListItem> selectedItems = myListBox.GetSelectedItems();
Run Code Online (Sandbox Code Playgroud)

正如olle所说,扩展方法可能是Linq-ified,而且你甚至进一步缩小到:

public static class ListBoxExtensions
{

    public static IEnumerable<ListItem> GetSelectedItems(this ListBox listbox)
    {
        var selectedItems = from ListItem i in myListbox.Items where i.Selected select i
        return selectedItems;
    }
}
Run Code Online (Sandbox Code Playgroud)