选中复选框但模型仍为假

时间:2015-02-04 06:43:21

标签: asp.net-mvc checkbox model-binding

我有以下型号:

  public class TaskViewModel{
   //other properties are omitted for brevity
    public bool IsUnderControl{get;set;}
  }

另一方面,我有两个DOM元素,我手动绑定到模型属性:

<input type="checkbox" name="IsUnderControl" value="true"/>
<input type="hidden" name="IsUnderControl" value="false" />

现在,提交后,即使选中了复选框,IsUnderControl的值也为false。这是POST方法:

[HttpPost]
public void SaveTask(TaskViewModel tvm){
   //When I debug the code I see that tvm.IsUnderControl=false
   if (ModelState.IsValid){
     //I save the task to repository
  }
}

*注意:当我检查复选框时,我看到元素复选框属性中没有checked="checked"

编辑:这是我用它创建相应输入元素的javascript:

$('#taskConfig').
   append('<input type="checkbox"  value="true" 
   name="IsUnderControl"/>').append('<input type="hidden" value="false"    
   name="IsUnderControl"/>');

1 个答案:

答案 0 :(得分:0)

首先,我要感谢@Stephen Muecke的帮助。他的建议帮助我选择了可​​能的错误,我终于找到了我的错误所在。我使用实体框架,我还没有找到一种更好的方法将bool属性连接到Oracle数据库中的列,而不是使用另一个名为IsUnderControlInt的属性,并将此属性转换为boolean in getter和setters方法。像这样:

[Column("ISUNDERCONTROL")]
public int IsUnderControlInt {get;set;}
[NotMapped]
public bool IsUnderControl 
{
   get {return Convert.ToBoolean(IsUnderControlInt);}
   set IsUnderControlInt=Convert.ToInt32(value);//This is correct
}

我在setter中犯了一个错误:我没有将传递的value转换为Int32,而是转换自己,就像这样:

 set IsUnderControlInt=Convert.ToInt32(IsunderControl);This is incorrect

这就是为什么它永远不会被设置为真。现在它很棒。谢谢大家。