使用jquery设置MVC CheckBoxFor值

时间:2014-07-11 00:42:54

标签: javascript jquery asp.net-mvc

对于那些知情人士来说这是一个简单的问题,然而,通过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">

正如您所看到的,绑定值未发生变化

更新

示例应该有效,请参阅例外答案

2 个答案:

答案 0 :(得分:1)

  

显然,第二个元素用于绑定

这不是严格正确的。 @Html.CheckBoxFor()方法同时呈现复选框和隐藏输入的原因是未选中复选框不会回发值。如果未选中该复选框,则隐藏的输入“假”&#39;值被回发。如果选中该复选框,则其“真实”&#39;返回值并忽略隐藏的输入值(默认模型绑定器忽略具有相同名称的后续值)。

您可以看到source code here

因此,您不需要更改隐藏输入的值,这样做可能会导致回发错误的值。

答案 1 :(得分:1)

如果为true,此代码会将复选框的选中状态更改为false。

 if ($("#cbinPro").is(":checked")) {
                $("#cbinPro").click();
            }