Bootstrap开关返回“开/关”而不是“真/假”

Bootstrap有大量使用,很多人比我更聪明,所以我确定我要指出的问题是完全没有问题,我只是错了,但…… 。

我有一个表单,其中一个复选框使用bootstrapSwitch()转换为开关

这是我的HTML

 

并且js:

 $("#Resend").bootstrapSwitch(); 

这会在我的页面上生成一个整洁的自举切换开关。 该页面发布到ASP.NET MVC4控制器方法,该方法需要模型中的布尔值。

 public class MyModel { public bool Resend { get; set; } } 

当我发布此表单时,我的Resend布尔值始终为false。 为什么? 因为bootstrap开关的值是on而不是true

我不想将我的模型从布尔值更改为字符串,因此我不得不在jquery中截取post并将复选框的值更改为true如果它已on 。 这似乎是我的倒退。 当然如果在复选框上使用bootstrapSwitch()它应该产生true/false而不是on/off

我错过了什么吗?

从HTML规范中 ,复选框的默认值为“on”,因为您没有包含value属性

默认情况下/上

获取时,如果元素具有value属性,则必须返回该属性的值; 否则, 它必须返回字符串“on” 。 在设置时,必须将元素的value属性设置为新值。

把你的HTML改成

 

因此,如果选中它,则将在表单数据中发送值true并正确绑定到您的boolean属性(如果未选中,则不会发送任何值,并且该属性将是其默认值( false

我只是添加我的发现,在这个问题中添加更多的值。 我在剃刀视图上有以下代码

  

当表单发布时,ModelState在vaild上显示以下错误

值’value’对Assigned无效。

当我在checked属性之后移动value属性时,它开始工作

  

由此,我猜值属性顺序也很重要。 如果我知道的话,请纠正我。