Wo finde ich die Liste der Fehler, die den ModelState ungültig machen? Ich habe keine Fehlereigenschaft für das ModelState-Objekt gesehen.
120
Wo finde ich die Liste der Fehler, die den ModelState ungültig machen? Ich habe keine Fehlereigenschaft für das ModelState-Objekt gesehen.
Über "Kann es sein, dass 0 Fehler und IsValid == false": Hier ist der MVC-Quellcode von 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);
}
}
Nun sieht es so aus, als ob es nicht sein kann. Nun, das ist für ASP.NET MVC v1.
Da Sie wahrscheinlich in Visual Studio programmieren, sollten Sie die Möglichkeit nutzen, Haltepunkte für so einfache Debugging-Schritte zu verwenden (um eine Vorstellung davon zu bekommen, wie das Problem in Ihrem Fall ist). Platzieren Sie sie einfach vor / an der Stelle, an der Sie ModelState.isValid überprüfen, und bewegen Sie den Mauszeiger über den ModelState. Jetzt können Sie einfach alle darin enthaltenen Werte durchsuchen und feststellen, welcher Fehler die isvalid-Rückgabe false verursacht.
quelle
var asdf = ModelState.Values.Where(v => v.Errors.Count > 0);
kann Ihnen helfenFügen Sie den folgenden Code in das ActionResult Ihres Controllers ein und platzieren Sie den Debugger an dieser Stelle.
quelle
oder iterieren mit
quelle
Manchmal löst ein Ordner eine Ausnahme ohne Fehlermeldung aus. Sie können die Ausnahme mit dem folgenden Snippet abrufen, um herauszufinden, was falsch ist:
(Oft, wenn der Ordner versucht, Zeichenfolgen in komplexe Typen usw. zu konvertieren.)
quelle
Wenn Sie die Prüfung für ModelsState.IsValid entfernen und einen Fehler zulassen, erhalten Sie beim Kopieren dieser Zeile
((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors
und Einfügen in den Überwachungsabschnitt in Visual Studio genau den Fehler. Spart viel Zeit bei der Überprüfung, wo der Fehler liegt.quelle
Die ModelState-Eigenschaft auf dem Controller ist tatsächlich ein ModelStateDictionary-Objekt. Sie können die Schlüssel im Wörterbuch durchlaufen und mithilfe der IsValidField-Methode überprüfen, ob dieses bestimmte Feld gültig ist.
quelle
Wie mir gerade passiert ist, kann dies auch passieren, wenn Sie Ihrem Modell eine erforderliche Eigenschaft hinzufügen, ohne Ihr Formular zu aktualisieren. In diesem Fall listet die ValidationSummary die Fehlermeldung nicht auf.
quelle