2010-04-11 11 views
15

Dadas las múltiples casillas de verificación HTML:Obtención de múltiples casillas de verificación de elemento FormCollection

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

¿Cómo retrive una matriz de enteros de un FormCollection en una acción:

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

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

    return View(); 
} 

Nota: Leí las preguntas relacionadas y no quiero cambiar mis parámetros de acción, por ej. Edit(int [] catIDs).

+0

Debe cambiar el valor 'name' de' checkbox's en 'catIds []' – Houssni

Respuesta

20

Cuando tiene varios controles con el mismo nombre, son valores separados por comas. En otras palabras:

string catIDs = form["catIDs"]; 

catIDs es "1,2,3, ..."

Así que para todos los valores que se podría hacer esto:

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

O usando LINQ:

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

A continuación, puede enumerar a través de todos los valores.

+3

catIDs podría ser "1, falso, 3,4, falso, 6, ...". es posible que deba eliminar esos falsos de su lista. –

17

La manera más segura sería utilizar: form.GetValues("CatIds") esto le conseguirá la matriz pasada en la publicación. En caso de que tuvieras comas en tu entrada.

Cuestiones relacionadas