ModelState.IsValid == false, почему?

Где я могу найти список ошибок, из-за которых ModelState недействителен? Я не видел никаких свойств ошибки в объекте ModelState.

Ответ 2

Как вы, вероятно, программируете в Visual studio, вам лучше воспользоваться возможностью использования точек останова для таких простых шагов отладки (чтобы понять, в чем проблема, как в вашем случае). Просто разместите их прямо перед/в том месте, где вы проверяете ModelState.isValid и наведите указатель мыши на ModelState. Теперь вы можете легко просмотреть все значения внутри и посмотреть, какая ошибка приводит к возврату isvalid false.

modelstate

Ответ 3

bool hasErrors =  ViewData.ModelState.Values.Any(x => x.Errors.Count > 1);

или итерации с помощью

    foreach (ModelState state in ViewData.ModelState.Values.Where(x => x.Errors.Count > 0))
    {

    }

Ответ 4

Вставьте указанный ниже код в ActionResult вашего контроллера и поместите отладчик в этот момент.

var errors = ModelState
    .Where(x => x.Value.Errors.Count > 0)
    .Select(x => new { x.Key, x.Value.Errors })
    .ToArray();

Ответ 5

Иногда связующее генерирует исключение без сообщения об ошибке. Вы можете получить исключение со следующим фрагментом, чтобы узнать, что не так:

(Часто, если связующее пытается преобразовать строки в сложные типы и т.д.)

 if (!ModelState.IsValid)
            {
var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));

// Breakpoint, Log or examine the list with Exceptions.

  }

Ответ 6

Если вы удалите проверку для ModelsState.IsValid и допустите ошибку, если вы скопируете эту строку ((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors и вставите ее в секцию просмотра в Visual Studio, вы получите именно то, что является ошибкой. Экономит много времени, проверяя, где находится ошибка.

Ответ 7

Свойство ModelState на контроллере фактически является объектом ModelStateDictionary. Вы можете перебирать ключи в словаре и использовать метод IsValidField, чтобы проверить, действительно ли это поле.

Ответ 8

Как только что произошло со мной - это также может произойти, если вы добавите требуемое свойство в свою модель без обновления вашей формы. В этом случае ValidationSummary не будет отображать сообщение об ошибке.