2011-03-29 106 views
4

当我尝试序列化jQuery中的<%: Html.CheckBox("Something", true) %>(使用form.serialize())时,我得到两个复选框,一个表示true,另一个表示false。我知道,MVC呈现真,假的复选框是真实的,所以如果我没有通过javascript,我只是检查是否存在真,但我怎么知道如果我的复选框后做表格检查。连载?Html.CheckBox呈现两个复选框

回答

4

如果你看看输出的HTML - 你会发现Html.Checkbox()实际上在其中呈现了一个额外的隐藏输入。这就是为什么你看到两个值。我相信微软决定这样做,以便一个适当的布尔获取张贴(而不是一个字符串值的'开'复选框)。

为了解决这个问题,我从来不再使用Html.Checkbox()助手,我总是自己写完整的HTML。

+0

好像标准html复选框将它设置为“on”,如果它被选中而不是布尔值。在将它发送到我的服务器之前,如何将值“on”转换为true? – Prabhu 2011-03-29 16:55:10

+0

您可以覆盖复选框的值,以便在发布时发送您选择的特定值。所以,你可以做的是:。当该复选框被选中时,jQuery表单序列化将mycheckbox = true。如果未选中,则不会序列化值。 – DNR 2011-03-29 17:16:09

+0

有趣的是,我在模型中添加了一个与复选框控件的名称相匹配的属性,但即使序列化字符串的值为复选框,模型属性始终为false。我必须在我的操作方法中添加一个额外的参数来收集复选框的值。 – Prabhu 2011-03-29 17:44:17

0

为什么不干脆:

var isChecked = $('#idofyourcheckbox').is(':checked'); 

至于存储在form.serialize()字符串的值都在关注他们注定要到服务器,你可以简单地用布尔属性的作用。