我正在实现一些基本的模型绑定来填充传递给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,我只想弄清楚如何获取模型绑定在缺少表单值时正确解析。
答案 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
}