Получение всех выбранных флажков из FormCollection - PullRequest
6 голосов
/ 30 сентября 2010

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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 30 сентября 2010

К сожалению, этот тип информации не доступен в коллекции. Однако, если вы добавите все свои флажки к чему-то вроде <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");
0 голосов
/ 19 мая 2014

Это один из старых вопросов, неактивных в течение многих лет, но я наткнулся на него.Моя проблема заключалась в том, что у меня есть массив флажков - скажем, имя 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();
    }
...