我继承的数据库在魔术字符串中存储多个布尔值。例如,字段PlantLocationString可以具有值" 0,1,3"表示该记录适用于内布拉斯加州(0),马萨诸塞州(1)和加拿大(3)的制造工厂,但不适用于加利福尼亚州(2),明尼苏达州(4)等其他地方。在多个领域重复设计不良我计划保持数据库不变。
为了处理这种奇怪现象,我创建了一个具有布尔属性的ViewModel,例如LocationNebraska = true,LocationCalifornia = false等。这个ViewModel使用魔术字符串字段保存对源Model / Entity的引用。在我的控制器中,我添加了将魔术字符串转换为适当的布尔值的例程,反之亦然。
问题在于ModelState和验证。 PlantLocationString具有Required属性,但只需要选择一个或多个布尔值(例如LocationNebraska)。 View中的复选框绑定到ViewModel布尔字段。当用户检查" LocationNebraska"验证应该在HttpPost上成功但它失败 - ModelState找到一个null PlantLocationString字段。即使控制器填充PlantLocationString ModelState.IsValid对该字段仍然为false。
如何才能最好地处理此验证问题?