所以问题出在我附加的变量上,我把html属性添加到我的复选框中。我的观点是这样的:
nbtcAttr = new {@Name = "NBTC"}
这将覆盖使用CheckBoxFor so生成的名称,而不是:
@Html.CheckBoxFor(m => m.NBTCGroup.NBTC_FA_Centroid)
//generates:
//<input name="NBTCGroup.NBTC_FA_Centroid" data-val:"true" data-val-required:"The NBTC_FA_Centroid field is required" id="NBTCGroup_NBTC_FA_Centroid" type="checkbox" value="true">
//<input name="NBTCGroup.NBTC_FA_Centroid" type="hidden" value="false">
@Html.CheckBoxFor(m => m.NBTCGroup.NBTC_FA_Centroid, nbtcAttr)
//generates:
//<input name="NBTC" data-val="true" data-val-required:"The NBTC_FA_Centroid field is required" id="NBTCGroup_NBTC_FA_Centroid" name="NBTCGroup.NBTC_FA_Centroid" type="checkbox" value="true">
//<input name="NBTCGroup.NBTC_FA_Centroid" type="hidden" value="false">
注意,在上一个示例中,true和false生成的复选框的名称不匹配。结果发现,模型绑定的过程查找name属性,因此当我更改名称时,它使用了
false
隐藏输入的值,无论是否选中复选框。它只看到了正确的名称(而
true
值的名称不正确),并将该值绑定到模型。
我所做的不是更改名称,而是添加了一个类,并用它来查找我想要的JS内容中的元素:
nbtcAttr = new {@class = "NBTC"}