对于已知的人来说,这是一个简单的问题,但是,通过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">


显然第二个元素用于绑定
我如何使用jquery更改这两个值,所以发布的模型将反映状态

以下代码仅更改视觉状态,而不更改绑定状态(如果这是正确的术语)
$("#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">


如您所见,绑定值没有改变

更新资料

该示例应该有效,请参见排除的答案

最佳答案

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


这不是严格正确的。 @Html.CheckBoxFor()方法同时呈现复选框和隐藏输入的原因是未选中的复选框不会回传值。如果未选中该复选框,则将隐藏的输入“ false”值回发。如果选中此复选框,则其“ true”值将回发,而隐藏的输入值将被忽略(默认模型绑定程序将忽略具有相同名称的后续值)。

您可以看到source code here

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

关于javascript - 使用jQuery设置MVC CheckBoxFor值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24688497/

10-11 05:32