Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 模型绑定器不会将复选框值传递到整数属性_Asp.net Mvc 4_Modelstate_Modelbinder - Fatal编程技术网

Asp.net mvc 4 模型绑定器不会将复选框值传递到整数属性

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)编辑数据库使其有点复杂

我的用户模型有一个名为active的int属性(它是int,因为我既没有创建模型也没有创建数据库,它被用作布尔值…)。我正在创建将编辑模型的操作
/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 }
    }

}