我正在使用MVC6并且在我的表单中有一个复选框输入字段,但是当提交表单时,复选框的值总是传递给ViewModel为false:
以下是我在ViewModel中声明属性的方法:
[Display(Name = "Include Sales Tax")]
public bool IncludeSalesTax { get; set; }
以下是我的MVC6剃须刀形式的表格:
<div class="form-group">
<div class="checkbox">
<label><input asp-for="IncludeSalesTax" type="checkbox" value="">@Html.DisplayNameFor(m => m.IncludeSalesTax)</label>
</div>
</div>
我认为以上是遵循Twitter Bootstrap标准并使用ASP.NET MVC6 asp-for标签进行模型绑定的最佳方式。
当我提交表单时,IncludeSalesTax的值总是为false,即使选中也是如此。我做错了什么?
答案 0 :(得分:26)
输入类型复选框发送&#34; on&#34;如果设置了。否则不会发送。 重要的是,将value属性设置为true。在这种情况下,它发送true或nothing,这是完美的绑定到布尔值。
<input type="checkbox" name="yourPropertyName" value="true" checked />
答案 1 :(得分:6)
剃刀视图引擎通常使用相同的名称创建一个复选框和一个隐藏的输入。
您只需使用下面的html即可确保获得所需的结果:
<div class="form-group">
<div class="checkbox">
<input type="checkbox" value="true" name="IncludeSalesTax" />Include Sales Tax
<input type="hidden" value="false" name="IncludeSalesTax" />
</div>
</div>
答案 2 :(得分:4)
让Visual Studio根据我的ViewModel生成表单后,就是这样做的:
<div class="checkbox">
<input asp-for="isTaxable" />
<label asp-for="isTaxable"></label>
</div>
另外,我错过了输入标签的关闭。所以它也可以这样做,这是引导程序的首选方式:
<label><input asp-for="isTaxable" type="checkbox" value=""/>@Html.DisplayNameFor(m => m.isTaxable)</label>
答案 3 :(得分:1)
如果复选框应默认为选中状态,则上述Pinki的答案很好。
如果该复选框应默认为未选中,则在单击时,一些内联JavaScript会将值设置为true或false:
<input name="yourPropertyName" type="checkbox" value="false" onchange="this.value=this.checked">