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



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

650   8  

8 ответов:

о "Может ли быть, что 0 ошибок и IsValid = = false": вот исходный код MVC из https://github.com/Microsoft/referencesource/blob/master/System.Web/ModelBinding/ModelStateDictionary.cs#L37-L41

public bool IsValid {
    get {
        return Values.All(modelState => modelState.Errors.Count == 0);
    }
}

теперь, похоже, этого не может быть. Ну, это для ASP.NET MVC v1.

поскольку вы, вероятно, программируете в Visual studio, вам лучше воспользоваться возможностью использования точек останова для таких простых шагов отладки (получив представление о том, в чем проблема, как в вашем случае). Просто поместите их прямо перед / в том месте, где вы проверяете ModelState.isValid и наведите указатель мыши на ModelState. Теперь вы можете легко просмотреть все значения внутри и посмотреть, какая ошибка вызывает IsValid return 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))
    {

    }

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

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

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

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

  }

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

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

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

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

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

Comments

    Ничего не найдено.