2017-04-21 77 views
0

我不知道如何讓選中的複選框變爲「真」,取消選中的複選框變成「假」布爾值。這是我正在處理的代碼的一個示例。ASP.net MVC剃刀 - 綁定複選框來布爾值

注意:我的put函數獲得200響應,但複選框只是不更新​​bool。

型號

public class AccountFeatures 
     { public bool? FormCopy { get; set; } 
      public bool? FormRename { get; set; } 
      public bool? FormTransfer { get; set; } 
      public bool? FormDelete { get; set; } 
      public bool? FormEdit { get; set; } 
      public bool? FormComplete { get; set; } 
     } 

查看

`$('.ui.form.accountfeatures').form({ 
      on: 'blur', 
      inline: true, 
      onSuccess: function() { 
       $('#features').dimmer('show'); 
       $.ajax({ 
        method: 'PUT', 
        data: { FormRename: $("#FormRename").val() ? true : false, 
         FormTransfer: $("#FormTransfer").val() ? true : false, 
         FormDelete: $("#FormDelete").val() ? true : false, 
         FormEdit: $("#FormEdit").val() ? true : false, 
         FormComplete: $("#FormComplete").val() ? true : false} 

HTML

<tr> 
        <td>Form Copy</td> 
        <td class="center aligned"> 
         <input type="checkbox" name="FormCopy" id="FormCopy" value="False" checked="@Model.Account.Features.FormCopy"> 
        </td> 
       </tr> 
       <tr> 
        <td>Form Rename</td> 
        <td class="center aligned"> 
         <input type="checkbox" name="FormRename" id="FormRename" value="FormRename" checked="@Model.Account.Features.FormRename"> 
        </td> 
       </tr> 
       <tr> 
        <td>Form Transfer</td> 
        <td class="center aligned"> 
         <input type="checkbox" name="FormTransfer" id="FormTransfer" value="FormTransfer" checked="@Model.Account.Features.FormTransfer"> 
        </td> 
       </tr> 
       <tr> 
        <td>Form Delete</td> 
        <td class="center aligned"> 
         <input type="checkbox" name="FormDelete" id="FormDelete" value="FormDelete" checked="@Model.Account.Features.FormDelete"> 
        </td> 
       </tr> 
       <tr> 
        <td>Form Edit</td> 
        <td class="center aligned"> 
         <input type="checkbox" name="FormEdit" id="FormEdit" value="FormEdit" checked="@Model.Account.Features.FormEdit"> 
        </td> 
       </tr> 
       <tr> 
        <td>Form Complete</td> 
        <td class="center aligned"> 
         <input type="checkbox" name="FormComplete" id="FormComplete" value="FormComplete" checked="@Model.Account.Features.FormComplete"> 
        </td> 
       </tr> 
+0

你手冊的html設置每個複選框的checked屬性(checked'屬性的存在意味着它被選中)你的'value'屬性與'bool'沒有關係(一個'bool'只能被綁定到'true'或'false',而不是'string') - 使用強類型的HtmlHelper方法來生成html –

回答

0

我通常使用EditorFor,它就可以工作:

@Html.EditorFor(m => m.CheckBoxProperty) 

但是,我通常也只使用bool,而不是bool?作爲我的複選框屬性。

一些需要注意的有關checked屬性 - 你通常要麼只使用屬性的名稱,如:

<input type="checkbox" name="FormComplete" id="FormComplete" value="FormComplete" checked /> 

或者你用checked="checked",如:

<input type="checkbox" name="FormComplete" id="FormComplete" value="FormComplete" checked="checked" /> 

任何其他方式,像checked="true"checked="false"不會產生您期望的結果,或者至少在所有瀏覽器中都不一致。無論您是否想要,這些用例通常會導致被選中的框。這裏有一個快速模仿了演示:

<input type="checkbox" value="test" name="test1" /> Test 1<br /> 
 
<input type="checkbox" value="test" name="test2" checked /> Test 2<br /> 
 
<input type="checkbox" value="test" name="test3" checked="checked" /> Test 3<br /> 
 
<input type="checkbox" value="test" name="test4" checked="true" /> Test 4<br /> 
 
<input type="checkbox" value="test" name="test5" checked="false" /> Test 5

和輸出的Chrome瀏覽器57下的截圖:

Screenshot

從本質上講,你想用邏輯來確定是否完全插入checked屬性,而不是插入它並使邏輯將其設置爲true或false。