2014-07-11 63 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(); 
      }