Wenn ich eine create-Methode mache, binde ich mein Objekt in den Parameter und überprüfe dann, ob ModelState
gültig ist, also füge ich der Datenbank folgendes hinzu:
Aber wenn ich etwas ändern muss, bevor ich es der Datenbank hinzufüge (bevor ich es ändere, könnte ModelState
nicht gültig sein, also muss ich es machen)
Warum ist der Modellzustand noch nicht gültig?
Was überprüft diese Funktion genau?
Dies ist mein Beispiel:
%Vor%ModelState.IsValid gibt an, ob es möglich war, die eingehenden Werte von der Anforderung korrekt an das Modell zu binden, und ob explizit angegebene Validierungsregeln während des Modellbindungsprozesses unterbrochen wurden.
In Ihrem Beispiel ist das Modell, das gebunden wird, vom Klassentyp Encaissement
. Validierungsregeln sind diejenigen, die im Modell durch Verwendung von Attributen, Logik und Fehlern spezifiziert sind, die innerhalb der IValidatableObject
Methode Validate()
hinzugefügt wurden - oder einfach innerhalb des Codes der Aktionsmethode.
Wenn die IsValid
-Eigenschaft wahr ist, wenn die Werte korrekt an das Modell binden konnten UND dabei keine Validierungsregeln verletzt wurden.
Hier ist ein Beispiel, wie ein Validierungsattribut und IValidatableObject
in Ihrer Modellklasse implementiert werden können:
Hier ist ein Beispiel, wie die gleiche Validierungsregel innerhalb der Aktionsmethode Ihres Beispiels angewendet werden kann:
%Vor% Beachten Sie, dass die Werttypen der Eigenschaften Ihres Modells ebenfalls validiert werden. Beispielsweise können Sie einer int
-Eigenschaft keinen Zeichenfolgenwert zuweisen. Wenn Sie dies tun, wird es nicht gebunden und der Fehler wird auch Ihrem ModelState
hinzugefügt.
In Ihrem Beispiel könnte der EncaissementID
-Wert keinen Wert von "Hello"
haben, der dazu führt, dass ein Modellüberprüfungsfehler hinzugefügt wird und IsValid
falsch ist.
Aus irgendeinem der obigen Gründe (und möglicherweise mehr) ist der IsValid
bool-Wert des Modellstatus false
.
ModelState.IsValid
sagt Ihnen im Grunde, ob Probleme mit Ihren Daten auf dem Server auftreten, basierend auf den Datenannoten, die den Eigenschaften Ihres Modells hinzugefügt wurden.
Wenn Sie beispielsweise [Required(ErrorMessage = "Please fill")]
haben und diese Eigenschaft leer ist, wenn Sie Ihr Formular an den Server senden, ist ModelState ungültig.
Der ModelBinder überprüft auch einige grundlegende Dinge für Sie. Wenn Sie beispielsweise einen BirthDate-Datepicker haben und die Eigenschaft, an die dieser Picker gebunden ist, keinen Nullwert DateTime
-Typ hat, ist Ihr ModelState auch ungültig, wenn Sie das Datum leer gelassen haben.
Sie finden eine großartige Beschreibung zu ModelState und dessen Verwendung hier .
Insbesondere ist die Eigenschaft IsValid
eine schnelle Möglichkeit zu überprüfen, ob in ModelState.Errors
Fehler bei der Feldüberprüfung auftreten. Wenn Sie nicht sicher sind, was Ihr Modell zu dem Zeitpunkt, an dem es auf Ihre Controller-Methode verweist, ungültig ist, können Sie die ModelState.Errors
-Eigenschaft überprüfen, die mindestens einen Formularüberprüfungsfehler ergeben sollte.
Tags und Links asp.net-mvc c#