2010-04-11 5 views
15

Gegeben mehrere HTML-Kontrollkästchen:Erste mehr Kontrollkästchen von Formcollection Elemente

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

Wie kann ich ein Array von ganzen Zahlen aus einer Formcollection in einer Aktion retrive:

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

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

    return View(); 
} 

Hinweis: Ich lese die verwandten Fragen und möchte meine Aktionsparameter nicht ändern, z. Edit(int [] catIDs).

+0

Sie sollten den 'name' Wert der' checkbox's in 'catIds []' ändern. – Houssni

Antwort

20

Wenn Sie mehrere Steuerelemente mit demselben Namen verwenden, handelt es sich um durch Kommas getrennte Werte. Mit anderen Worten:

string catIDs = form["catIDs"]; 

CATIDs ist "1,2,3, ..."

Also alles, um die Werte bekommen Sie dies tun würde:

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

Oder mit Linq:

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

Dann können Sie durch alle Werte aufzählen.

+3

catIDs könnten "1, false, 3,4, false, 6, ..." sein. Sie müssen diese False möglicherweise von Ihrer Liste entfernen. –

17

Der sicherere Weg wäre zu verwenden: form.GetValues("CatIds") Dies wird Ihnen das Array in der Post übergeben. Nur für den Fall, dass Sie Kommas eingegeben haben.