Модели MVC не успешно обновлены, но не могут найти причину
Это привело меня в бешенство.
Я получаю следующее исключение
System.InvalidOperationException: модель типа "Models.Expense" не была успешно обновлена. в System.Web.Mvc.Controller.UpdateModel [TModel] (модель TModel, префикс String, String [] includeProperties, String [] excludeProperties, IDictionary`2 valueProvider) в System.Web.Mvc.Controller.UpdateModel [TModel] (модель TModel) atMVC.Controllers.BaseExpenseController.Edit(String id, CollectionCollection collection) в C:\Projects\Expenses.MVC\Controllers\BaseExpenseController.cs: строка 109
Но я не могу отследить, почему он не обновляется, ничего в исключении не указывает, почему он не обновился.
Любые указатели?
Ответы
Ответ 1
Вместо этого выведите исключение или вызовите TryUpdateModel. TryUpdateModel не будет генерировать исключение, если он не может обновить вашу модель, он просто вернет false. Вы найдете сведения об ошибках в ModelState, как было предложено Крейгом.
Фактически UpdateModel просто вызывает TryUpdateModel и бросает, если он возвращает false.
Ответ 2
Изучите контроллер .ModelState и найдите записи с ошибками > 0.
Ответ 3
Трудно сказать, не видя никакого кода, но каждый раз, когда я видел исключение этого типа, 99% времени было связано с базой данных. Не сказать, что основная причина не где-то в коде, но вполне возможно, что вы что-то упустили и пытаетесь передать недопустимые данные в базу данных. Другие проблемы, которые нужно искать, - это любая обработка отношений, которая должна иметь место.
Ответ 4
У меня была такая же проблема, и проблема была в том, что я использую интерфейс IValidatableObject в модели, которая была связана с той, которую я обновил. Реальная проблема была в базе данных, так как валидация дает, что я дублировал записи для уникального столбца:)
Дело в том. Вы должны использовать UpdateModel или TryUpdateModel, оба метода обновляют ModelState.IsValid. Теперь иногда бывает трудно найти причину ошибки. Посмотрите на отладчик для ModelState.ErrorKeys и проверьте, есть ли запись, которой не должно быть:)
Приветствия
Ответ 5
Обычно я проверяю 3 вещи.
- Сделайте каждый из участников модели
есть геттеры и сеттеры.
- Выполняю требования
модель. т.е.: все
данные присутствуют и правильны?
- Я что-то нарушаю? Нужно ли иметь значения по умолчанию для вложенных объектов?
Если это все еще не удается, я вернусь к;
class MyClass(FormCollection collection)
{
string a = collection["MyField"];
который обычно работает.
Ответ 6
В сгенерированной веб-форме проверьте, есть ли у вас скрытое поле, возможно, идентификатор какого-либо типа, который не может быть обновлен.