2010-04-11 5 views
15

Учитывая несколько HTML флажки:Попадая несколько флажков из FormCollection элемента

<input type="checkbox" name="catIDs" value="1" /> 
<input type="checkbox" name="catIDs" value="2" /> 
... 
<input type="checkbox" name="catIDs" value="100" /> 

Как retrive массив целых чисел от 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).

+0

Вы должны изменить значение 'name'' checkbox 'в' catIds [] ' – Houssni

ответ

20

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

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)); 

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

+3

catIDs может быть« 1, false, 3,4, false, 6, ... ». вам, возможно, придется удалить эти фальши из вашего списка. –

17

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