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

Pet*_*ron 15 checkbox asp.net-mvc formcollection

给出多个HTML复选框:

<input type="checkbox" name="catIDs" value="1" />
<input type="checkbox" name="catIDs" value="2" />
...
<input type="checkbox" name="catIDs" value="100" />
Run Code Online (Sandbox Code Playgroud)

如何从动作中的FormCollection中检索整数数组:

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

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

    return View();
}
Run Code Online (Sandbox Code Playgroud)

注意:我阅读了相关问题,但我不想更改我的操作参数,例如.Edit(int [] catIDs).

Kel*_*tex 20

如果有多个具有相同名称的控件,则它们是逗号分隔值.换一种说法:

string catIDs = form["catIDs"];
Run Code Online (Sandbox Code Playgroud)

catIDs是"1,2,3,......"

因此,要获得所有值,您将执行此操作:

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

或者使用Linq:

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

然后,您可以枚举所有值.

  • catID可能是"1,false,3,4,false,6,...".你可能不得不从列表中删除那些谬误. (3认同)

小智 17

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