复选框输入在表单提交时仍然为假

时间:2019-04-04 11:56:55

标签: forms post asp.net-core checkbox

我正在尝试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属性)。

2 个答案:

答案 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]

的键值对。

如果未选中复选框,则发布的表单完全不包含对该复选框的引用。