Получение всех выбранных флажков из 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");
Затем вы можете просто просмотреть их как коллекцию.