Pass values of checkBox to controller action in asp.net mvc4

160,911

Solution 1

If a checkbox is checked, then the postback values will contain a key-value pair of the form [InputName]=[InputValue]

If a checkbox is not checked, then the posted form contains no reference to the checkbox at all.

Knowing this, the following will work:

In the markup code:

<input id="responsable" name="checkResp" value="true" type="checkbox" />

And your action method signature:

public ActionResult Index(string responsables, bool checkResp = false)
{
    //Do Something
}

This will work because when the checkbox is checked, the postback will contain checkResp=true, and if the checkbox is not checked the parameter will default to false.

Solution 2

For some reason Andrew method of creating the checkbox by hand didn't work for me using Mvc 5. Instead I used this

@Html.CheckBox("checkResp")

to create a checkbox that would play nice with the controller.

Solution 3

try using form collection

<input id="responsable" value="True" name="checkResp" type="checkbox" /> 

[HttpPost]
public ActionResult Index(FormCollection collection)
{
     if(!string.IsNullOrEmpty(collection["checkResp"])
     {
        string checkResp=collection["checkResp"];
        bool checkRespB=Convert.ToBoolean(checkResp);
     }

}

Solution 4

None of the previous solutions worked for me. Finally I found that the action should be coded as:

public ActionResult Index(string MyCheck = null)

and then, when checked the passed value was "on", not "true". Else, it is always null.

Hope it helps somebody!

Solution 5

If you want your value to be read by MVT controller when you submit the form and you don't what to deal with hidden inputs. What you can do is add value attribute to your checkbox and set it to true or false.

MVT will not recognize viewModel property myCheckbox as true here

<input type="checkbox" name="myCheckbox" checked="checked" />

but will if you add

<input type="checkbox" name="myCheckbox" checked="checked" value="true" />

Script that does it:

$(document).on("click", "[type='checkbox']", function(e) {
        if (this.checked) {
            $(this).attr("value", "true");
        } else {
            $(this).attr("value","false");}
    });
Share:
160,911
Nancy
Author by

Nancy

Updated on September 09, 2021

Comments

  • Nancy
    Nancy over 2 years

    I want to test if the checkbox is checked or not from my action method. What I need is to pass checkbox value from view to controller.

    This is my view:

    @using (Html.BeginForm("Index", "Graphe"))
    {
        <table style="width: 100%;" border="1">
            <tbody>
                <tr>
                    <td>Responsable:</td>
                    <td>
                        <select id="Responsables" name="responsables">
                            <option>Selectionnez --</option>
                        </select>
                    </td>
                    <td><input id="responsable" name="checkResp" type="checkbox" /></td>
                </tr>
                <tr> 
                    <td><input type="submit" value="Afficher" id="ButtonSubmit"/></td>
                    <td><input class="button" id="ButtonReset" type="button" value="Annuler"  /></td>
                </tr>
            </tbody>
        </table>
    }
    

    and I try this:

    public ActionResult Index(string responsables, bool checkResp)
    {
        Highcharts chart = new Highcharts("chart");
    
        if (responsables != null)
        {          
            if (checkResp)
                chart = Global();
            else
                chart = Resp(responsables);
        }
        else
            chart = Global();
        return View(chart);
    }
    

    But I receive this error:

    Le dictionnaire de paramètres contient une entrée Null pour le paramètre « checkAct » de type non Nullable « System.Boolean » pour la méthode « System.Web.Mvc.ActionResult Index(System.String, System.String, Boolean) » dans « Project.Controllers.GrapheController ». Un paramètre facultatif doit être un type référence, un type Nullable ou être déclaré en tant que paramètre facultatif. Nom du paramètre : parameters

    Translated:

    The parameter dictionary contains a null entry for the "checkAct" parameter of non-nullable type "System.Boolean" for the method "System.Web.Mvc.ActionResult Index (System.String, System.String, Boolean) ”in“ Project.Controllers.GrapheController ". An optional parameter must be a reference type, a type Nullable or be declared as an optional parameter. Name of parameter: parameters