Получение всех выбранных флажков из FormCollection

У меня есть форма, которая содержит целую кучу флажков и некоторые другие виды контроля тоже. Мне нужно получить имена каждого выбранного флажка.

Каков наилучший способ сделать это? Можно ли это сделать с помощью запроса linq?

Итак, в псевдокоде я собираюсь сделать что-то вроде этого:

var names = formCollection
               .Where(c => c is Checkbox && c.Checked)
               .Select(c => c.Name);

Обновление Кажется, что MVC отправляет флажки, отличается от того, как будет вести себя нормальная форма, так как скрытое поле также отображается. Я нашел подробности здесь: Как обрабатывать флажки в формах ASP.NET MVC?

Во всяком случае, у меня это работает с помощью этой темы и ответ от BuildStarted ниже. Следующий код сделал свое дело.

var additionalItems = form.AllKeys
       .Where(k => form[k].Contains("true") && k.StartsWith("addItem"))
               .Select(k => k.Substring(7));

3 ответа

Решение

К сожалению, этот тип информации не доступен в коллекции. Однако, если вы добавите все свои флажки с чем-то вроде <input type='checkbox' name='checkbox_somevalue' /> тогда вы можете запустить запрос как

var names = formCollection.AllKeys.Where(c => c.StartsWith("checkbox"));

Поскольку только проверенные значения будут опубликованы, вам не нужно проверять, что они проверены.

Вот тот, который захватывает только проверенные значения

var names = formCollection.AllKeys.Where(c => c.StartsWith("test") && 
                        formCollection.GetValue(c) != null &&
                        formCollection.GetValue(c).AttemptedValue == "1");

Это один из старых вопросов, неактивных в течение многих лет, но я наткнулся на него. Моя проблема заключалась в том, что у меня есть массив флажков - скажем, имя IsValid и я хотел получить статус каждого из флажков (мой проект был в MVC 5). При отправке формы я сделал цикл сбора формы и получил значения как...

if (key.Contains("IsValid"))
                    sV = (string[])collection.GetValue(key.ToString()).RawValue;

Поскольку в форме публикации значение скрытого поля также было отмечено флажками; массив содержал одно дополнительное значение "ложь" для ТОЛЬКО отмеченного флажка. Чтобы избавиться от них, я использовал следующую функцию; Я надеюсь, что это кому-то поможет, и если мой подход неверен, то лучшее решение будет полезно и для меня!

sV = FixCheckBoxValue(sV);

        private string[] FixCheckBoxValue(string[] sV)
    {
        var iArrayList = new List<string>(sV);

        for (int i = 0; i < iArrayList.Count; i++)
        {
            if (iArrayList[i].ToString() == "true")
            {
                iArrayList.RemoveAt(i + 1);
            }                
        }
        return iArrayList.ToArray();
    }

Отвечая на сообщение о массиве флажков, вы могли изначально отфильтровать флажки по имени.

      var keys = formCollection.AllKeys.Where(x => x.StartsWith("IsValid");

Затем вы можете просто просмотреть их как коллекцию.

Другие вопросы по тегам