对于那些知情人士来说这是一个简单的问题,然而,通过Google搜索和堆栈搜索,我发现没有直接或直接的答案。
我有一个简单的CheckBoxFor
@Html.CheckBoxFor(x => x.Classify)
生成以下2个页面元素
<input data-val="true" data-val-required="The Classify field is required." id="Classify" name="Classify" onclick="OnClassifyClick(this)" type="checkbox" value="true" data-bind="checked:Classify">
<input name="Classify" type="hidden" value="false" data-bind="value:Classify">
显然第二个元素用于绑定&lt; - 这个假设不正确
如何使用jquery更改这两个值,因此发布的模型将反映状态
以下代码仅更改视觉状态而非绑定状态(如果这是正确的术语)&lt; - 此假设不正确
$("#Classify").attr('checked', true);
结果如下
<input data-val="true" data-val-required="The Classify field is required." id="Classify" name="Classify" onclick="OnClassifyClick(this)" type="checkbox" value="true" data-bind="checked:Classify" checked="checked">
<input name="Classify" type="hidden" value="false" data-bind="value:Classify">
正如您所看到的,绑定值未发生变化
更新
示例应该有效,请参阅例外答案
答案 0 :(得分:1)
显然,第二个元素用于绑定
这不是严格正确的。 @Html.CheckBoxFor()
方法同时呈现复选框和隐藏输入的原因是未选中复选框不会回发值。如果未选中该复选框,则隐藏的输入“假”&#39;值被回发。如果选中该复选框,则其“真实”&#39;返回值并忽略隐藏的输入值(默认模型绑定器忽略具有相同名称的后续值)。
您可以看到source code here。
因此,您不需要更改隐藏输入的值,这样做可能会导致回发错误的值。
答案 1 :(得分:1)
如果为true,此代码会将复选框的选中状态更改为false。
if ($("#cbinPro").is(":checked")) {
$("#cbinPro").click();
}