Получение нескольких флажков из элемента FormCollection
Учитывая несколько флагов HTML:
<input type="checkbox" name="catIDs" value="1" />
<input type="checkbox" name="catIDs" value="2" />
...
<input type="checkbox" name="catIDs" value="100" />
Как получить массив целых чисел из FormCollection в действии:
public ActionResult Edit(FormCollection form)
{
int [] catIDs = (IEnumerable<int>)form["catIDs"]; // ???
// alternatively:
foreach (int catID in form["catIDs"] as *SOME CAST*)
{
// ...
}
return View();
}
Примечание.. Я прочитал связанные вопросы, и я не хочу изменять свои параметры действия, например. Edit(int [] catIDs)
.
Ответы
Ответ 1
Если у вас несколько элементов управления с тем же именем, они являются значениями, разделенными запятой. Другими словами:
string catIDs = form["catIDs"];
catIDs - "1,2,3,..."
Итак, чтобы получить все значения, вы сделаете это:
string [] AllStrings = form["catIDs"].Split(',');
foreach(string item in AllStrings)
{
int value = int.Parse(item);
// handle value
}
Или используя Linq:
var allvalues = form["catIDs"].Split(',').Select(x=>int.Parse(x));
Затем вы можете перечислить все значения.
Ответ 2
Более безопасным способом было бы использовать: form.GetValues("CatIds")
это даст вам массив, переданный в сообщении. На всякий случай у вас были запятые на вашем входе.