我有以下型号:
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"/>');
答案 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
这就是为什么它永远不会被设置为真。现在它很棒。谢谢大家。