我知道有很多人面临这个问题,但是我觉得他们从未解决过。
我有一个像这样的剃须刀页面:
@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应该处理它,但显然不行。
答案 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">