我正在使用MVC3,ASP.NET 4.5,C#,Razor,SQL Server 2008 +
我必须首先说我在回发行动中使用“域对象”。
public ActionResult Edit(Order myOrder)
它不是ViewModel。
因此,默认模型绑定器将匹配所有表单属性并将值分配给myOrder。这意味着将为以下项分配空值:
a) Properties with null values
b) Missing properties.
b)是杀手,因为人们可以攒到数据库并突然发现一大堆价值被消灭。
目前我使用名为ValueInjector的映射器,它忽略空值以防止出现此问题。但是它也会阻止a)即新设置为null的属性,不会保存。
如果默认模型绑定器可以忽略表单中任何缺少的属性,那将是一件好事。我真的不明白为什么它不能开箱即用。我怀疑我需要创建一个自定义模型绑定器?我确实意识到通常的方法是创建ViewModel,然后通过Automapper / ValueInjector等将它们运行到域对象中,但我真的很难理解为什么模型绑定器会破坏域对象中不存在于表单中的属性
那么如何让默认的Model Binder忽略缺少的表单属性呢?
非常感谢任何指导。