模型绑定器不会将复选框值传递给整数属性

时间:2013-05-31 21:01:52

标签: asp.net-mvc-4 modelstate modelbinder

我的用户模型有一个名为active的 int 属性(它是一个int,因为我没有创建模型,也没有创建数据库,它被用作布尔值..)。我正在创建将编辑模型的操作/Users/Edit/,因此我有一个带有活动属性复选框的表单。按下提交按钮时,模型绑定器会将所有表单数据放在一个单个对象中,并将其作为参数传递给/Users/Edit

但是当我尝试将更改保存到数据库时,我检查ModelState.isValid并返回false,因为模型绑定器不会将布尔值更改为整数。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

1)编辑Db使其有点

2)将视图模型上的属性更改为bool

3)在Razor View中使用DisplayFor

现在它将自动生成一个复选框并相应地进行检查。

答案 1 :(得分:0)

让我们假设您无法将Db更改为bool。然后,您将使用视图模型为您执行数据转换。

说出你的用户模型是这样的:

public class StaticModel {

    public string description { get; set; }
    public int IsActive { get; set; }

}

然后创建一个视图模型(外观样式):

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 }
    }

}

你的视图现在绑定到一个bool并且所有连接都正常。