1

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

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

@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 应该处理它,但显然没有。

4

1 回答 1

1

所以,发生的情况是,当您不选中 HTML 复选框时,默认发送的值为null。但是,当您使用 HTML 帮助程序 @Html.CheckBoxFor(model => model.MyBool)时,它会按照您的要求自动为 MyBool 值创建一个 Checkbox ,另外还有一个 @Html.Hidden("MyBool",false)。这将做的是,如果 MyBool 没有任何值(如果未选中复选框),它将传递 False,而不是 null。

创建的 HTML:

  <input id="MyBool" name="MyBool" type="checkbox" value="true">
  <input name="MyBool" type="hidden" value="false">
于 2019-03-13T09:37:59.057 回答