我试图获取asp:ListBox控件的选定项目,并将它们放在逗号分隔的字符串中。那么必须有一种更简单的方法:
foreach (ListItem listItem in lbAppGroup.Items)
{
if (listItem.Selected == true)
{
Trace.Warn("Selected Item", listItem.Value);
}
}
有没有办法把它变成一条线?喜欢我的伪代码:
string values = myListBox.SelectedItems;
我正在使用ASP.NET和C#3.5。
谢谢你的帮助!!
使用LINQ:
string values = String.Join(", ", lbAppGroup.Items.Cast<ListItem>()
.Where(i => i.Selected)
.Select(i => i.Value));
我不认为有任何内置,但你可以做这样的事情:
<asp:ListBox runat="server" ID="listBox" SelectionMode="Multiple">
<asp:ListItem Selected="True" Text="text1" Value="value1"></asp:ListItem>
<asp:ListItem Selected="false" Text="text2" Value="value2"></asp:ListItem>
<asp:ListItem Selected="True" Text="text3" Value="value3"></asp:ListItem>
<asp:ListItem Selected="True" Text="text4" Value="value4"></asp:ListItem>
</asp:ListBox>
IEnumerable<string> selectedValues = from item in listBox.Items.Cast<ListItem>()
where item.Selected
select item.Text;
string s = string.Join(",", selectedValues);
var selectedQuery = listBox.Items.Cast<ListItem>().Where(item => item.Selected);
string selectedItems = String.Join(",", selectedQuery).TrimEnd();
另一种方法是使用Request Form对象,其中包含已回发的所有内容。例如:
string values = Request.Form(lbAppGroup.UniqueID); //returns "a,b" if they were selected
默认情况下,返回所选项目的逗号分隔列表。当我不想或不需要再次绑定数据但仍希望获取所选值以进行处理时,我有时会使用这种方式。