从ASP列表框中获取所有选定的值

问题描述:

我有一个ASP ListBox,其SelectionMode设置为“Multiple”。是否有任何方法来检索所有选定的元素,而不仅仅是最后一个?从ASP列表框中获取所有选定的值

<asp:ListBox ID="lstCart" runat="server" Height="135px" Width="267px" SelectionMode="Multiple"></asp:ListBox> 

使用lstCart.SelectedIndex只是返回最后一个元素(如预期的那样)。有什么东西会给我所有选择的?

这是一个web表单。

您可以使用ListBox.GetSelectedIndices method并遍历结果,然后通过items集合访问每个结果。或者,您可以遍历所有项目并检查其Selected property。使用VB.NET使用此代码,我创建列表框

List<int> selecteds = listbox_cities.GetSelectedIndices().ToList(); 

     for (int i=0;i<selecteds.Count;i++) 
     { 
      ListItem l = listbox_cities.Items[selecteds[i]]; 
     } 
+0

谢谢。我用它给你的第二个解决方案工作。 – 2009-10-18 21:47:06

+0

没有问题!我添加了代码以显示不同的方法。如果您决定使用LINQ,则需要投射Items集合。 – 2009-10-18 21:59:50

+1

LINQ lamba规则。谢谢您的帮助。 – 2015-12-28 13:29:57

使用GetSelectedIndices方法:

Public Shared Function getSelectedValuesFromListBox(ByVal objListBox As ListBox) As String 
    Dim listOfIndices As List(Of Integer) = objListBox.GetSelectedIndices().ToList() 
    Dim values As String = String.Empty 

    For Each indice As Integer In listOfIndices 
     values &= "," & objListBox.Items(indice).Value 
    Next indice 
    If Not String.IsNullOrEmpty(values) Then 
     values = values.Substring(1) 
    End If 
    Return values 
End Function 

我希望它能帮助。

试试

// GetSelectedIndices 
foreach (int i in ListBox1.GetSelectedIndices()) 
{ 
    // ListBox1.Items[i] ... 
} 

// Items collection 
foreach (ListItem item in ListBox1.Items) 
{ 
    if (item.Selected) 
    { 
     // item ... 
    } 
} 

// LINQ over Items collection (must cast Items) 
var query = from ListItem item in ListBox1.Items where item.Selected select item; 
foreach (ListItem item in query) 
{ 
    // item ... 
} 

// LINQ lambda syntax 
var query = ListBox1.Items.Cast<ListItem>().Where(item => item.Selected);