Getting Checkbox Value in ASP.NET MVC 4
@Html.EditorFor(x => x.Remember)
Will generate:
<input id="Remember" type="checkbox" value="true" name="Remember" />
<input type="hidden" value="false" name="Remember" />
How does it work:
- If
checkbox
remains unchecked, the form submits only thehidden
value (false) - If checked, then the form submits two fields (false and true) and MVC sets
true
for the model'sbool
property
<input id="Remember" name="Remember" type="checkbox" value="@Model.Remember" />
This will always send the default value, if checked.
Since you are using Model.Name to set the value. I assume you are passing an empty view model to the View.
So the value for Remember is false, and sets the value on the checkbox element to false. This means that when you then select the checkbox, you are posting the value "false" with the form. When you don't select it, it doesn't get posted, so the model defaults to false. Which is why you are seeing a false value in both cases.
The value is only passed when you check the select box. To do a checkbox in Mvc use
@Html.CheckBoxFor(x => x.Remember)
or if you don't want to bind the model to the view.
@Html.CheckBox("Remember")
Mvc does some magic with a hidden field to persist values when they are not selected.
Edit, if you really have an aversion to doing that and want to generate the element yourself, you could do.
<input id="Remember" name="Remember" type="checkbox" value="true" @(Model.Remember ? "checked=\"checked\"" : "") />
Use only this
$("input[type=checkbox]").change(function () {
if ($(this).prop("checked")) {
$(this).val(true);
} else {
$(this).val(false);
}
});