2010-04-11 45 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

您應該將'checkbox'的'name'值更改爲'catIds []' – Houssni 2013-04-07 16:20:47

回答

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

catID可能是「1,false,3,4,false,6,...」。你可能不得不從你的列表中刪除這些錯誤。 – 2011-11-18 09:22:48

17

更安全的方法是使用:form.GetValues("CatIds")這將使您獲得在帖子中傳遞的數組。以防萬一您的輸入中有逗號。