2014-07-11 24 views
1

对于那些知道的人来说,这是一个简单的问题,但是,对于Google搜索和堆栈搜索,我发现没有直接或直接的答案。用jquery设置MVC CheckBoxFor值

我有一个简单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"> 

正如你可以看到绑定值没有改变

更新

的例子应该工作,看到除外答案

回答

1

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

这并不完全正确。 @Html.CheckBoxFor()方法呈现复选框和隐藏输入的原因是未选中的复选框不会回传值。如果复选框没有被选中,那么隐藏的输入'false'值被回传。如果复选框被选中,则它的“真”值被回传,并且隐藏的输入值被忽略(默认模型联编程序忽略具有相同名称的后续值)。您可以看到source code here

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

+0

所以我发布的jQuery例子应该工作(理论上)? –

+0

是的。你只想改变复选框,而不是隐藏的输入。 –

1

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

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