Asp.net mvc 当并非所有表单值都存在时,是否可以使用模型绑定来更新对象?

Asp.net mvc 当并非所有表单值都存在时,是否可以使用模型绑定来更新对象?,asp.net-mvc,model-binding,Asp.net Mvc,Model Binding,我正在实现一些基本的模型绑定,以填充传递到动作中的对象(正常使用)。第一个操作是创建方法,在本例中,我要求所有参数都存在 然而,对于另一个操作,它只是一个更新方法,在本例中,我将接受所有表单值,但我也希望它能够只接收一个或几个表单值,从而只更新指定的字段 我相信我必须以某种方式让它们在没有值时默认为null或“”。然而,我的印象是,模型绑定要求所有参数都在POST中,以便解析获取该对象的操作 这是可能的,并且我使用相同的模型对象实现它,还是我需要制作“完整版本”和“部分版本” 编辑:试图让这一点

我正在实现一些基本的模型绑定,以填充传递到动作中的对象(正常使用)。第一个操作是创建方法,在本例中,我要求所有参数都存在

然而,对于另一个操作,它只是一个更新方法,在本例中,我将接受所有表单值,但我也希望它能够只接收一个或几个表单值,从而只更新指定的字段

我相信我必须以某种方式让它们在没有值时默认为null或“”。然而,我的印象是,模型绑定要求所有参数都在POST中,以便解析获取该对象的操作

这是可能的,并且我使用相同的模型对象实现它,还是我需要制作“完整版本”和“部分版本”

编辑:试图让这一点更清楚:

现在如果我有这个动作:

公共行动结果MyAction(MyObject obj)

MyObject对象有3个变量:var1、var2和var3

然后,如果我发布到MyAction并只包含var1和var2,它将不会解析,因为模型绑定没有找到var3


然而,我希望它能这样工作!这样,如果有人只想发布var1(以及一些ID),我可以在数据库中查找对象并更新对象的var1,而不使用var2和var3,我只是想弄清楚,当表单值丢失时,如何正确解析模型绑定。

您可以使用
Bind
属性将希望发布的属性列为白名单。这将告诉模型绑定器仅绑定指定的字段

public ActionResult MyAction([Bind(Include = "Field3,Field4")MyObject myObject)
更新字段子集的正常情况是从完全填写的数据库中获取MyObject,并使用重载调用UpdateModel和要更新的字段白名单

[HttpPost]    
public ActionResult MyAction()
{
    var myObject = GetMyObjectFromDatabase();
    TryUpdateModel(myObject, string.Empty /* prefix */, "Field3,Field4");
    // myObject now has Field3 and Field4 values from the POST
}

你的问题对我来说毫无意义。也许如果你展示一些代码,它会变得更容易理解一点。@DarinDimitrov添加了更多细节。你希望它解决什么问题
var3
未在请求中发送,因此模型绑定器将其解析为最佳值:
null
。我看不出你有什么问题?@DarinDimitrov这正是我想要它的行为方式,但当我尝试时,我实际上得到了“没有为这个对象定义无参数构造函数”。你为哪个对象得到这个异常<代码>我的对象?如果是这种情况,你有两种可能性:1。添加默认构造函数(不管怎样,视图模型的良好实践)或2。为
MyObject
类型编写自定义模型绑定器。