当不是所有表单值都存在时,是否可以使用模型绑定来更新对象?

时间:2011-07-12 21:03:06

标签: asp.net-mvc model-binding

我正在实现一些基本的模型绑定来填充传递给Action的对象(正常使用)。第一个Action是CREATE方法,在这种情况下,我需要所有参数都存在。

对于这个其他Action,它只是一个UPDATE方法,在这种情况下我将接受所有表单值,但我也希望它只能接收一个或少数几个,从而只更新指定的字段。

我相信如果没有值,我必须以某种方式将它们默认为null或“”。但是,我认为模型绑定需要POST中的所有参数才能解析获取该对象的Action。

这是可能的吗?我使用相同的Model对象实现它,还是需要制作'完整版'和'部分版'?

编辑:尝试更清楚地说明这一点:

现在,如果我有这个动作:

  

public ActionResult MyAction(MyObject obj)

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

然后如果我POST到MyAction并且只包含var1和var2,它将无法解析,因为Model Binding没有找到var3

但是,我希望它以这种方式工作!这样,如果有人想要只发布var1(以及一些ID),我可以查找数据库中的对象和对象的UPDATE var1,同时单独留下var2和var3,我只想弄清楚如何获取模型绑定在缺少表单值时正确解析。

1 个答案:

答案 0 :(得分:0)

您可以使用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
}