Was macht ModelState.IsValid?

7

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%     
kokomoi 27.04.2016, 15:08
quelle

3 Antworten

11

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:

%Vor%

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 .

    
Luke 27.04.2016, 15:31
quelle
7

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.

Hier und hier sind einige nützliche Beiträge zu lesen.

    
monstertjie_za 27.04.2016 15:31
quelle
2

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.

    
X3074861X 27.04.2016 15:32
quelle

Tags und Links