【问题标题】:Is there a reason that ASP.NET's CheckBoxList doesn't have a SelectedItems member?ASP.NET 的 CheckBoxList 没有 SelectedItems 成员是否有原因?
【发布时间】:2010-09-22 16:29:05
【问题描述】:

每当我想获得选定的项目时,我都必须遍历每个项目并查看它是否被选中。他们甚至有一个 SelectedItem(末尾没有“s”)成员,这对于 CheckBoxList 来说似乎很奇怪。这似乎是一个合乎逻辑的东西,有谁知道他们为什么没有添加它?

【问题讨论】:

    标签: asp.net design-decisions


    【解决方案1】:

    因为他们没有在 CheckBoxList 中实现 SelectedItem,而是在 CheckBoxList 继承自的 ListControl 中实现。可以说 CheckBoxList 需要回到源代码,因为它的许多编写方式并不“正确”,但这是一个主观论点。 (这是个人咆哮的主题,我刚刚遇到太多 CheckBoxList 做一些迟钝的事情,这很烦人,仅此而已。只是我的思维方式不是我想的,而且从来没有其他人证实它是对他们来说也很烦人。)

    【讨论】:

      【解决方案2】:

      除了达斯汀的 en drachenstern 的答案。你可以自己滚动:-)

      public static IEnumerable<ListItem> SelectedItems(this CheckBoxList cbl)
      {
          return cbl.Items.Cast<ListItem>().Where(l=>l.Selected == true);
      }
      

      【讨论】:

      • 非常酷的解决方案,必须开始使用这个。不过不得不给@drachenstern打勾
      【解决方案3】:

      我不得不说,因为复选框列表呈现单个 HTML 复选框,这些复选框不像单选按钮那样可分组,因此需要逐项评估 selected 属性。

      它是documentation 的一部分。另请注意,SelectedIndex 将返回带有lowest index 的项目。

      CheckBoxList 控件提供了一个 多选复选框组 可以用数据动态生成 捆绑。它包含一个项目 与成员对应的集合 到列表中的单个项目。到 确定检查哪些项目, 遍历集合并 测试每个的 Selected 属性 列表中的项目。

      【讨论】:

        【解决方案4】:

        将 CheckBoxList 子类化并自己实现此功能也相当容易,然后您可以重复使用。

        public class ExtendedCheckBoxList : CheckBoxList
        {
            public List<string> SelectedItems
            {
                get
                {
                    return (from ListItem item in Items
                            where item.Selected
                            select item.Value).ToList();
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2013-05-15
          • 1970-01-01
          • 1970-01-01
          • 2023-03-04
          • 2014-05-17
          • 2013-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多