ASP.NET Core 2 MVC CheckBoxFor 在模型中总是返​​回 false

ASP.NET Core 2 MVC CheckBoxFor always returning false in model

我知道有很多人遇到过这个问题,但我觉得他们从来没有解决过。

我有一个像这样的剃刀页面:

@model MyModel
<div>
    @using (Html.BeginForm("MyMethod", "Home", FormMethod.Get))
    {
        @Html.CheckBoxFor(model => model.MyBool)
        @Html.LabelFor(model => model.MyBool)
        <input type="submit" class="btn" value="Fire it up" />
    }
</div>

我的模型是这样的:

public class MyModel
{
    [DisplayName("My checkbox")]
    public bool MyBool {get; set;}
}

我在家庭控制器中的方法如下所示:

public IActionResult MyMethod(MyModel model)
{
    return View();
}

我觉得一切都很好,但是,无论我是否选中复选框,提交表单后 MyMethod 方法中的模型参数始终为 false。

我做错了什么?

编辑:

当我选中复选框时,GET 请求包含两个值 - true 和 false。 我看到有人说 MVC 应该处理它,但显然没有。

所以,当您不选中 HTML 复选框时,默认发送的值为 null。 但是,当您使用 HTML 助手 @Html.CheckBoxFor(model => model.MyBool) 时,它会自动为 MyBool 值创建一个复选框,如下所示你问了,另外还有一个 @Html.Hidden("MyBool",false)。这将做的是,如果 MyBool 没有任何值(如果未选中复选框),它将传递 False,而不是 null。

HTML 创建:

  <input id="MyBool" name="MyBool" type="checkbox" value="true">
  <input name="MyBool" type="hidden" value="false">