MVC模型未成功更新但无法找到原因

时间:2009-07-07 14:52:40

标签: asp.net-mvc

这让我疯了。

我一直收到以下异常

System.InvalidOperationException:未成功更新“Models.Expense”类型的模型。    at System.Web.Mvc.Controller.UpdateModel [TModel](TModel model,String prefix,String [] includeProperties,String [] excludeProperties,IDictionary`2 valueProvider)    在System.Web.Mvc.Controller.UpdateModel [TModel](TModel模型)    atMVC.Controllers.BaseExpenseController.Edit(String id,FormCollection集合)在C:\ Projects \ Expenses.MVC \ Controllers \ BaseExpenseController.cs:第109行

但我无法追查为什么它没有更新,异常中没有任何内容表明它没有更新。

任何指针?

6 个答案:

答案 0 :(得分:15)

捕获异常或改为调用TryUpdateModel。如果TryUpdateModel无法更新您的模型,它将不会抛出异常,它将返回false。您可以按照Craig的建议在ModelState中找到错误详细信息。 事实上,UpdateModel只调用TryUpdateModel,如果返回false则抛出。

答案 1 :(得分:12)

检查controller.ModelState并查找带有错误>的条目。 0

答案 2 :(得分:2)

如果没有看到任何代码,很难肯定地说,但每次我看到这种类型的异常时,99%的时间都与数据库相关。不是说根本原因不在代码中的某个地方,但很可能你错过了某些东西并试图将无效数据传递给数据库。要寻找的其他问题是需要进行的任何关系处理。

答案 3 :(得分:1)

我有同样的问题,问题是因为我在模型中使用IValidatableObject接口,这与我更新的相关。真正的问题是在数据库中,因为验证产生了我有唯一列的重复条目:)

事情是这样的。您应该使用UpdateModel或TryUpdateModel,这两种方法都会更新ModelState.IsValid。现在,有时可能很难找到导致错误的原因。查看ModelState.ErrorKeys的调试器并检查是否存在不应存在的条目:)

干杯

答案 4 :(得分:0)

我通常检查3件事。

  1. 做每个模特成员 有吸气剂和二传手
  2. 我是否符合要求 该模型。即:都是必需的 数据存在且正确吗?
  3. 我是否在某个地方违反了某段关系?我是否需要在嵌套对象上使用默认值?
  4. 如果仍然失败,那么我会回复;

    class MyClass(FormCollection collection)
    {
      string a = collection["MyField"];
    

    通常有用。

答案 5 :(得分:0)

在生成的网络表单上,检查您是否有隐藏字段,可能是某种无法更新的ID。