我正在尝试post a form
,即使所有inputs
在接收的controller
方法中相应地映射了它们的值,复选框的bool
-s仍然保留false
。
我在做什么错了?
POCO
class MyPoco
{
public string User{get;set;}
public bool Require {get;set;}
}
表格
<form id="createForm" method="post" action="[some url]">
<input type="checkbox" id="require" name="Require" />
<input type="text" id="user" name="User"/>
</form>
控制器(方法)
[HttpPost]
[Route("[some url]")]
public async Task<long> CreateAsync(MyPoco request)
{
}
在上述情况下,为什么request.Require
始终为假。我已经正确地映射了它们(name
属性)。
答案 0 :(得分:1)
我看到您的复选框输入缺少asp-for
属性。代替name="Require"
,使用asp-for="Require"
如下:
@model MyPoco
<input asp-for="Require" type="checkbox" id="require" />
如果您不想使用asp-for
属性,则必须使用jQuery
,如下所示:
$(document).on('change','#require',function() {
if ($(this).is(':checked')) {
$(this).val(true)
} else {
$(this).val(false)
}
});
答案 1 :(得分:1)
原因是您忘记设置复选框的值:
<input type="checkbox" id="require" name="Require" value="true" />
如果选中此复选框,则回发值将包含格式为[InputName] = [InputValue]
的键值对。如果未选中复选框,则发布的表单完全不包含对该复选框的引用。