这让我疯了。
我一直收到以下异常
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行
但我无法追查为什么它没有更新,异常中没有任何内容表明它没有更新。
任何指针?
答案 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件事。
如果仍然失败,那么我会回复;
class MyClass(FormCollection collection)
{
string a = collection["MyField"];
通常有用。
答案 5 :(得分:0)
在生成的网络表单上,检查您是否有隐藏字段,可能是某种无法更新的ID。