对于知情人士来说,这是一个简单的问题,但是,通过 Google 搜索和 Stack 搜索,我发现没有直接或直截了当的答案。
我有一个简单的 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">
显然第二个元素用于绑定(bind)<-- 这个假设是不正确的
我如何使用 jquery 来更改这两个值,以便发布的模型将反射(reflect)状态
以下代码仅更改视觉状态而不更改绑定(bind)状态(如果这是正确的术语)<-- 此假设不正确
$("#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">
如你所见,绑定(bind)值没有改变
更新
示例应该有效,请参阅异常(exception)答案
最佳答案
Obviously the second element is used for binding
这并不完全正确。 @Html.CheckBoxFor()
方法呈现复选框和隐藏输入的原因是未选中的复选框不会回发值。如果未选中该复选框,则回发隐藏输入的“false”值。如果选中该复选框,则会回发其“真”值并忽略隐藏的输入值(默认模型绑定(bind)器会忽略具有相同名称的后续值)。
你可以看到 source code here .
因此您不需要更改隐藏输入的值,这样做可能会导致回传不正确的值。
关于javascript - 使用 jquery 设置 MVC CheckBoxFor 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24688497/