.NET 6 - Checkbox tag helper post always true

649 Views Asked by At

I don't understand why the following code is not working. I have a simple checkbox and seems model binding is always assigning the value true. (I'm using .NET 6 mvc)

I put my checkbox inside a form:

<div class="form-group">
    <label asp-for="@Model.CurrentUser.Active"></label>
    <input asp-for="@Model.CurrentUser.Active"/>
</div>

In model I declared Active property as boolean:

[Display(Name = "Active", ResourceType = typeof(Resources))]
[Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "RequiredField")]
public bool Active { get; set; }

When I submit the form, the property Active is always true, even if I uncheck the checkbox.

1

There are 1 best solutions below

0
On

this works.

Controller/View Model:

public class CurrentUser
{
    public bool Active { get; set; }
}
public class aViewModel
{
    public CurrentUser CurrentUser { get; set; }
}
public class HomeController : Controller
{
    [HttpPost]
    public ActionResult Index8(aViewModel aViewModel)
    {
        //put breakpoint here
        aViewModel vm = new aViewModel { CurrentUser = new CurrentUser { Active = false } };
        return View(vm);
    }
    public ActionResult Index8()
    {
        //setup default current user
        aViewModel vm = new aViewModel { CurrentUser = new CurrentUser { Active = false } };
        return View(vm);
    }

View:

@model SO.Controllers.aViewModel
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index8</title>
</head>
<body>
    @using (Html.BeginForm())
    {
        <div class="form-group">
            <label asp-for="@Model.CurrentUser.Active"></label>
            @*<input asp-for="@Model.CurrentUser.Active" />*@
            @Html.CheckBoxFor(r => r.CurrentUser.Active)
        </div>
        <input id="Submit" type="submit" value="submit" />
    }
</body>
</html>