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

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

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

    ModelState

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

    или повторить

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

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

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

      if (!ModelState.IsValid) { var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception)); // Breakpoint, Log or examine the list with Exceptions. } 

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

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

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

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

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

    Давайте будем гением компьютера.