2010-04-11 16 views
15

Attribuite più caselle di controllo HTML:Ottenere più caselle da elemento FormCollection

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

Come faccio a retrive un array di interi da un FormCollection in un'azione:

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

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

    return View(); 
} 

Nota: Ho letto le domande correlate e non voglio modificare i miei parametri di azione, ad es. Edit(int [] catIDs).

+0

Si dovrebbe cambiare il valore 'name' della' checkbox's in 'catIds []' – Houssni

risposta

20

Quando si dispone di più controlli con lo stesso nome, sono valori separati da virgola. In altre parole:

string catIDs = form["catIDs"]; 

catIDs è "1,2,3, ..."

in modo da ottenere tutti i valori che ci si farlo:

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

o utilizzando Linq:

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

Quindi è possibile enumerare tutti i valori.

+3

catIDs potrebbe essere "1, false, 3,4, false, 6, ...". potresti dover rimuovere quei falsi dalla tua lista. –

17

Il modo più sicuro sarebbe quello di utilizzare: form.GetValues("CatIds") questo ti porterà la matrice passata nel post. Nel caso avessi virgole nel tuo contributo.

Problemi correlati