ASP.NET Core 2 MVC CheckBoxFor始终在模型中返回false

时间:2019-03-12 01:41:56

标签: asp.net-core razor asp.net-core-mvc checkboxfor

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

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

@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方法中的model参数始终为false。

我在做什么错了?

编辑:

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

1 个答案:

答案 0 :(得分:0)

因此,发生的事情是,当您不选中HTML复选框时,默认情况下发送的值为。 但是,当您使用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">