2010-04-11 6 views
15

Étant donné plusieurs cases à cocher HTML:Obtenir plusieurs cases à cocher de l'élément FormCollection

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

Comment puis-je retrive un tableau d'entiers d'un FormCollection dans une action:

public ActionResult Edit(FormCollection form) 
{ 
    int [] catIDs = (IEnumerable<int>)form["catIDs"]; // ??? 

    // alternatively: 
    foreach (int catID in form["catIDs"] as *SOME CAST*) 
    { 
     // ... 
    } 

    return View(); 
} 

Note: J'ai lu les questions connexes et je ne veux pas changer mes paramètres d'action, par exemple. Edit(int [] catIDs).

+0

Vous devriez changer la valeur 'name' de la' checkbox's en 'catIds []' – Houssni

Répondre

20

Lorsque vous avez plusieurs contrôles avec le même nom, ce sont des valeurs séparées par des virgules. En d'autres termes:

string catIDs = form["catIDs"]; 

catIDs est "1,2,3, ..."

Donc, pour obtenir toutes les valeurs que vous feriez ceci:

string [] AllStrings = form["catIDs"].Split(','); 
foreach(string item in AllStrings) 
{ 
    int value = int.Parse(item); 
    // handle value 
} 

Ou LINQ:

var allvalues = form["catIDs"].Split(',').Select(x=>int.Parse(x)); 

Ensuite, vous pouvez énumérer toutes les valeurs.

+3

catIDs pourrait être "1, false, 3,4, false, 6, ...". vous devrez peut-être supprimer ces fausses de votre liste. –

17

Le moyen le plus sûr serait d'utiliser: form.GetValues("CatIds") cela vous obtiendra le tableau passé dans le message. Juste au cas où vous auriez des virgules dans votre entrée.

Questions connexes