Ich habe ein Modell mit 4 Eigenschaften vom Typ Zeichenfolge. Ich weiß, dass Sie die Länge einer einzelnen Eigenschaft mithilfe der StringLength-Annotation überprüfen können. Ich möchte jedoch die Länge der 4 kombinierten Eigenschaften überprüfen.
Wie kann MVC dies mit Datenanmerkungen tun?
Ich frage dies, weil ich neu bei MVC bin und es richtig machen möchte, bevor ich meine eigene Lösung mache.
c#
.net
asp.net-mvc
asp.net-mvc-3
data-annotations
Danny van der Kraan
quelle
quelle
Antworten:
Sie können ein benutzerdefiniertes Validierungsattribut schreiben:
und dann könnten Sie ein Ansichtsmodell haben und eine seiner Eigenschaften damit dekorieren:
quelle
this.RuleFor(x => x.Foo).Must((x, foo) => x.Foo.Length + x.Bar.Length + x.Baz.Length < 20).WithMessage("The combined minimum length of the Foo, Bar and Baz properties should be longer than 20");
. Schauen Sie sich nun den Code in meiner Antwort an, den Sie mit den Datenanmerkungen schreiben müssen, und sagen Sie mir, welchen Sie bevorzugen. Das deklarative Validierungsmodell ist im Vergleich zu einem imperativen Modell sehr schlecht.IsValid
es heißt, ist das leidervalidationContext
null. Irgendeine Idee, was ich falsch gemacht habe? :-(Selbst validiertes Modell
Ihr Modell sollte eine Schnittstelle implementieren
IValidatableObject
. Geben Sie Ihren Validierungscode in die folgendeValidate
Methode ein:Bitte beachten Sie: Dies ist eine serverseitige Validierung. Auf Client-Seite funktioniert es nicht. Ihre Validierung wird erst nach dem Absenden des Formulars durchgeführt.
quelle
ExpressiveAnnotations bietet Ihnen eine solche Möglichkeit:
quelle
Um Darins Antwort zu verbessern, kann sie etwas kürzer sein:
Modell:
Beachten Sie, dass eine Fehlermeldung erforderlich ist, da sonst der Fehler leer ist.
quelle
Hintergrund:
Modellvalidierungen sind erforderlich, um sicherzustellen, dass die empfangenen Daten, die wir erhalten, gültig und korrekt sind, damit wir die weitere Verarbeitung mit diesen Daten durchführen können. Wir können ein Modell in einer Aktionsmethode validieren. Die integrierten Validierungsattribute sind Compare, Range, RegularExpression, Required, StringLength. Möglicherweise haben wir jedoch Szenarien, in denen wir andere als die integrierten Validierungsattribute benötigen.
Benutzerdefinierte Validierungsattribute
Um ein benutzerdefiniertes Validierungsattribut zu erstellen, müssen Sie diese Klasse von ValidationAttribute ableiten.
Hoffe das hilft. Prost !
Verweise
quelle
Ein bisschen spät zu antworten, aber für wen sucht. Sie können dies einfach tun, indem Sie eine zusätzliche Eigenschaft mit der Datenanmerkung verwenden:
Das ist alles, was es wirklich ist. Wenn Sie den Validierungsfehler wirklich auch an einer bestimmten Stelle anzeigen möchten, können Sie diesen in Ihrer Ansicht hinzufügen:
Dies in der Ansicht zu tun, kann nützlich sein, wenn Sie eine Lokalisierung durchführen möchten.
Hoffe das hilft!
quelle