MVC2 TryUpdateModel包含的属性不会忽略未包含字段的验证

时间:2011-01-12 17:54:22

标签: asp.net-mvc-2 validation

我的MVC 2应用程序中有一个表单允许用户从模型对象更新一组字段,这纯粹是一个更新,因为模型对象已经存在并且输入了必需的字段。但是,当我尝试更新一小组字段并在模型对象上调用TryUpdateModel时,它会失败并且我的模型状态会根据已填写的必填字段出错。

这是我的控制器代码:

[HttpPost]
public ActionResult Work(int id, FormCollection forms)
{
    var lead = claimRepo.GetLeadByID(id);
    if (lead == null)
        return View("NotFound");
    if (TryUpdateModel(lead, "Lead")) {...}
}

我甚至尝试明确说明要更新的字段

TryUpdateModel(lead, "Lead", new string[] { "Date", "UserID", ...}) {...}

它仍然失败,是否有一些原因不会忽略未包含的字段的验证或我做错了什么?

谢谢!

编辑

我发现了这个问题,我的类上有一个属性,它不是数据库支持的,并且在元数据中被标记为必需,因此添加一个getter和setter来返回属性表示导致TryUpdateModel通过的内容,但我仍然很好奇为什么显式包含属性并没有忽略我没有包含的字段。

另一个编辑

我有一个用户模型以及所有数据库支持的必填字段,并且尝试明确说明哪些字段正在更新仍会导致表单中缺少字段的模型状态错误,但是从数据库填充模型对象正在更新。

1 个答案:

答案 0 :(得分:0)

我不确定何时更改默认行为以仅验证传入数据,我知道我认为只有asp.net mvc1支持它,然后在asp.net mvc2中更改,无论如何你可以说[Validate(false)并允许部分数据通过并手动进行一些验证。您可以使用ViewModel并根据需要验证视图模型上的所有字段作为第二个选项。一个有用的链接:partial validation