在我的 Asp.NET 网站上,我有一个允许多选的列表框。我希望能够询问类似以下的问题:
blah = myListbox.selectedItems;
需要从列表框中选定的项目集合,看起来在Windows Forms世界中有一种方法可以做到这一点,但是在asp.NET中没有。有没有比仅遍历项目集合寻找所选值更简单的方法?
以下代码可以获取选中的项目:
List<ListItem> selectedItems = new List<ListItem>();
int[] selectedItemsIndexes = myListbox.GetSelectedIndices();
foreach (int selectedItem in selectedItemsIndexes)
{
selectedItems.Add(myListbox.Items[selectedItem]);
}
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;
}
}
现在你可以直接调用:
List<ListItem> selectedItems = myListBox.GetSelectedItems();
正如Olle所建议的那样,扩展方法可以进行Linq化,从而进一步缩小:
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;
}
}
没有这样的属性,但是一个简单的linq查询可以快速轻松地获取结果。
var selectedItems = from ListItem i in myListbox.Items where i.Selected select i;