Есть ли причина, по которой CheckBoxList в ASP.NET не имеет члена SelectedItems?

Всякий раз, когда я хочу получить выбранные элементы, я должен пройтись по каждому элементу и посмотреть, выбран ли он. У них даже есть элемент SelectedItem (без "s" в конце), который кажется странным для CheckBoxList. Кажется, что это логично, кто-нибудь знает, почему они его не добавили?

4 ответа

Решение

Потому что они не реализуют SelectedItem в CheckBoxList, но в ListControl, от которого наследуется CheckBoxList. Можно утверждать, что CheckBoxList должен быть возвращен к исходному тексту, так как многие из написанных им способов не являются "правильными", но это субъективный аргумент. (это тема личного разговора, я только что натолкнулся на слишком много случаев, когда CheckBoxList делал что-то глупо, и это раздражало, вот и все. Просто я не думаю, что мой разум работает, и никогда не было, чтобы другие подтверждали, что это так. раздражает их тоже.)

В дополнение к ответам Дастина Эн Драхенштерна. Вы можете свернуть свой собственный:-)

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

Я должен сказать, что, поскольку список флажков отображает отдельные флажки HTML, которые не группируются, как переключатели, выбранное свойство необходимо оценивать для каждого элемента отдельно.

Это часть документации. Также обратите внимание, что SelectedIndex вернет товар с самым низким индексом.

Элемент управления CheckBoxList предоставляет группу флажков с множественным выбором, которые можно динамически генерировать с помощью привязки данных. Он содержит коллекцию предметов, элементы которой соответствуют отдельным предметам в списке. Чтобы определить, какие элементы проверяются, выполните итерацию по коллекции и протестируйте свойство Selected каждого элемента в списке.

Также довольно легко создать подкласс CheckBoxList и реализовать эту функцию самостоятельно, которую затем можно использовать повторно.

public class ExtendedCheckBoxList : CheckBoxList
{
    public List<string> SelectedItems
    {
        get
        {
            return (from ListItem item in Items
                    where item.Selected
                    select item.Value).ToList();
        }
    }
}
Другие вопросы по тегам