【问题标题】:ASP:ListBox Get Selected Items - One Liner?ASP:ListBox 获取选定的项目 - 一个衬里?
【发布时间】:2012-01-18 17:21:07
【问题描述】:

我正在尝试获取 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。

感谢您的帮助!!

【问题讨论】:

    标签: c# asp.net linq listbox c#-3.0


    【解决方案1】:

    使用 LINQ:

    string values = String.Join(", ", lbAppGroup.Items.Cast<ListItem>()
                                                      .Where(i => i.Selected)
                                                      .Select(i => i.Value));
    

    【讨论】:

    • 您好,太好了。我试图让它工作,我遇到了这个问题:'System.Web.UI.WebControls.ListItemCollection'不包含'Where'的定义,并且没有扩展方法'Where'接受'System.可以找到 Web.UI.WebControls.ListItemCollection'(您是否缺少 using 指令或程序集引用?)我的 using 语句中有 LINQ。
    • @user993514 我忘了ListItem的演员表,试试看。
    • 完美的 LINQ 再次拯救了这一天。非常感谢您的帮助。
    • ListBox.getSelectedItems 发生了什么..msdn.microsoft.com/en-us/library/aa297606(v=vs.60).aspx
    • @Pleun 实际上经过一番调查后,这是针对 WinForms 而不是 ASP.NET,不过大喊大叫。
    【解决方案2】:

    我认为没有内置任何东西,但你可以这样做:

      <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);
    

    【讨论】:

      【解决方案3】:

      其实里面有一些东西:

      ListBox.getSelectedItems

      http://msdn.microsoft.com/en-us/library/aa297606(v=vs.60).aspx

      【讨论】:

      • 这是用于 Win Forms 的吗?我似乎无法在 ASP.NET 中做到这一点
      • 是的,我的错。我的开发电脑不在这里,所以我添加链接太快了。虽然有 ListBox.GetSelectedIndices。我还以为是getSelectedItems...
      【解决方案4】:
      var selectedQuery = listBox.Items.Cast<ListItem>().Where(item => item.Selected); 
      string selectedItems =  String.Join(",", selectedQuery).TrimEnd();
      

      【讨论】:

      • .TrimEnd() 在这里似乎是多余的。如果要从字符串中删除空格,恕我直言,您应该在第一行的每个项目上执行该操作。
      • 第一个查询没有检索到字符串
      【解决方案5】:

      另一种方法是使用请求表单对象,该对象包含回发的所有内容。例如:

      string values = Request.Form(lbAppGroup.UniqueID);  //returns "a,b" if they were selected
      

      默认情况下,这会返回一个以逗号分隔的选定项目列表。 当我不想或不需要再次绑定数据但仍想获取选定的值进行处理时,我有时会使用这种方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-04
        • 2021-04-26
        • 2019-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-03
        相关资源
        最近更新 更多