从FormCollection元素中获取多个复选框

时间:2010-04-11 16:34:49

标签: asp.net-mvc checkbox formcollection

给出多个HTML复选框:

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

如何在动作中从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)

2 个答案:

答案 0 :(得分: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));

然后你可以枚举所有值。

答案 1 :(得分:17)

更安全的方法是使用:form.GetValues("CatIds")这将获得帖子中传递的数组。以防你输入中有逗号。