Получение нескольких флажков из элемента 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).


person Petrus Theron    schedule 11.04.2010    source источник
comment
Вы должны изменить name значение checkboxs на catIds[]   -  person    schedule 07.04.2013


Ответы (2)


Если у вас есть несколько элементов управления с одинаковыми именами, они представляют собой значения, разделенные запятыми. Другими словами:

string catIDs = form["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));

Затем вы можете перечислить все значения.

person Keltex    schedule 11.04.2010
comment
идентификаторы кошек могут быть 1,false,3,4,false,6,.... возможно, вам придется удалить эти ложные значения из списка. - person Will Wu; 18.11.2011

Более безопасным способом было бы использовать: form.GetValues("CatIds") это даст вам массив, переданный в сообщении. На всякий случай, если у вас были запятые в вашем вводе.

person anthonyterra    schedule 05.07.2012