2017-04-21 58 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。