有没有理由说ASP.NET的CheckBoxList没有SelectedItems成员?

时间:2010-09-22 16:29:06

标签: asp.net design-decisions

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

4 个答案:

答案 0 :(得分:4)

因为它们没有在CheckBoxList中实现SelectedItem,而是在CheckConList继承的ListControl中实现。可以说CheckBoxList需要被带回源,因为它编写的许多方式都不是“正确的”,但这是一个主观论点。 (这是个人咆哮的主题,我只是碰到了太多的CheckBoxList做了一些虚假的事情而且很烦人,就是这样。只是不是我脑子里的工作方式,而且从来没有让别人证实它是他们也很讨厌。)

答案 1 :(得分:4)

除了Dustin的en drachenstern的答案。你可以自己动手: - )

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

答案 2 :(得分:3)

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

它是documentation的一部分。另请注意,SelectedIndex会返回包含lowest index的项目。

  

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

答案 3 :(得分:1)

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

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