Search code examples
asp.net-mvccheckboxformcollection

Getting multiple checkboxes from FormCollection element


Given multiple HTML checkboxes:

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

How do I retrive an array of integers from a FormCollection in an action:

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

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

    return View();
}

Note: I read the related questions and I don't want to change my action parameters, eg. Edit(int [] catIDs).


Solution

  • When you have multiple controls with the same name, they are comma separated values. In other words:

    string catIDs = form["catIDs"];
    

    catIDs is "1,2,3,..."

    So to get all the values you would do this:

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

    Or using Linq:

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

    Then you can enumerate through all the values.