Asp.net mvc 4 模型绑定器不会将复选框值传递到整数属性
我的用户模型有一个名为active的int属性(它是int,因为我既没有创建模型也没有创建数据库,它被用作布尔值…)。我正在创建将编辑模型的操作Asp.net mvc 4 模型绑定器不会将复选框值传递到整数属性,asp.net-mvc-4,modelstate,modelbinder,Asp.net Mvc 4,Modelstate,Modelbinder,我的用户模型有一个名为active的int属性(它是int,因为我既没有创建模型也没有创建数据库,它被用作布尔值…)。我正在创建将编辑模型的操作/Users/Edit/,因此我得到了一个带有活动属性复选框的表单。当按下提交按钮时,模型绑定器将把所有表单数据放在一个对象中,并将其作为参数传递给/Users/Edit 但是当我试图保存对数据库的更改时,我选中了ModelState.isValid,它返回false,因为模型绑定器不会将布尔值更改为整数 我如何解决这个问题?1)编辑数据库使其有点复杂
/Users/Edit/
,因此我得到了一个带有活动属性复选框的表单。当按下提交按钮时,模型绑定器将把所有表单数据放在一个对象中,并将其作为参数传递给/Users/Edit
但是当我试图保存对数据库的更改时,我选中了ModelState.isValid
,它返回false,因为模型绑定器不会将布尔值更改为整数
我如何解决这个问题?1)编辑数据库使其有点复杂
2) 将视图模型上的属性更改为布尔
3) 在Razor视图中使用DisplayFor
现在,它将自动生成一个复选框并相应地进行检查。让我们假设最坏的情况是您无法将Db更改为bool。然后使用视图模型为您执行数据转换 假设您的用户模型是这样的:
public class StaticModel {
public string description { get; set; }
public int IsActive { get; set; }
}
然后创建视图模型(立面样式):
您的视图现在绑定到bool,并且所有连接都正常。复选框表示true或false。你为什么不直接用一个bool来结束这一天呢?因为我没有创建数据库,在数据库中你可以编辑数据库吗?它应该是一个位。您是否对视图和数据库使用完全相同的对象类型?理想情况下,您可以更改视图模型,如果在进入数据库之前需要修复数据,则可以在填充数据库模型时进行修复。没问题。玩得开心:)-我会把它放在一个解决方案中,这样一旦你实现了它,你就可以关闭它。James方法更适合我,因为我可以将其更改为bool,但很高兴知道=)
public class StaticModelFacade {
StaticModel _value;
public StaticModelFacade(StaticModel value) {
_value = value;
}
public string description {
get {return _value.description;}
set {_value.description = value;}
}
public bool IsActive {
get { return _value.IsActive = 1; }
set { _value.IsActive = value ? 1 : 0 }
}
}