Asp.net mvc 如何自定义模型绑定以忽略回发时缺少的属性?

Asp.net mvc 如何自定义模型绑定以忽略回发时缺少的属性?,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我正在使用MVC3、ASP.NET4.5、C、Razor、SQLServer2008+ 我必须首先说我在回发操作中使用了一个域对象 public ActionResult Edit(Order myOrder) 它不是ViewModel 因此,默认的模型绑定器将匹配所有表单属性,并将值分配给myOrder。这意味着将为以下对象分配空值: a) Properties with null values b) Missing properties. b是杀手,因为人们可以保存到数据

我正在使用MVC3、ASP.NET4.5、C、Razor、SQLServer2008+

我必须首先说我在回发操作中使用了一个域对象

        public ActionResult Edit(Order myOrder)
它不是ViewModel

因此,默认的模型绑定器将匹配所有表单属性,并将值分配给myOrder。这意味着将为以下对象分配空值:

a) Properties with null values
b) Missing properties.
b是杀手,因为人们可以保存到数据库中,突然发现大量的值被删除了

目前,我使用一个名为ValueInjector的映射程序,它忽略null以防止出现此问题。但是,它还将防止新设置为null的ie属性无法保存

如果默认的模型绑定器可以忽略表单中缺少的任何属性,那就好了。我真的不明白为什么它不做这个开箱即用。我想我需要创建一个自定义模型绑定器?我意识到通常的方法是创建ViewModel,然后通过Automapper/ValueInjector等将其运行到域对象中,但我真的很难理解为什么模型绑定器会与表单中不存在的域对象中的属性相混淆

那么,如何让默认的模型绑定器忽略缺少的表单属性呢


非常感谢您的指导。

如果绑定器忽略该属性,该属性的值不是空值吗?如果属性“丢失”,您希望该属性具有什么其他值。这是不在视图中使用域模型的最佳原因之一。使用特定于视图的视图模型。我以前遇到过类似的问题,即使是视图模型。我的解决办法是打破正常化。使用空视图模型并使用ajax发布。我知道这不是你想要的答案,但它是一个解决方案。@SamJolly默认的脚手架确实鼓励在视图中使用域模型,在控制器中使用DbContext。我认为这对于一些琐碎的项目来说是可以的,但通常情况下,您应该在视图中使用ViewModels,并将数据访问移到另一层。现在是下降的,但昨天是上升的。。。