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">
我知道有很多人遇到过这个问题,但我觉得他们从来没有解决过。
我有一个像这样的剃刀页面:
@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">