Pass values of checkBox to controller action in asp.net mvc4
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");}
});
Nancy
Updated on September 09, 2021Comments
-
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