Gibt es eine Möglichkeit durch Datenanmerkungen, dass eine boolesche Eigenschaft auf true gesetzt werden muss?
public class MyAwesomeObj{
public bool ThisMustBeTrue{get;set;}
}
asp.net-mvc
data-annotations
Marty Trenouth
quelle
quelle
Antworten:
Sie können Ihren eigenen Validator erstellen:
quelle
return (bool) value == true;
Dies ist ein redundanter VergleichIch würde einen Validator sowohl für die Server- als auch für die Clientseite erstellen. Mit MVC und unauffälliger Formularvalidierung kann dies einfach durch Folgendes erreicht werden:
Erstellen Sie zunächst eine Klasse in Ihrem Projekt, um die serverseitige Validierung wie folgt durchzuführen:
Kommentieren Sie anschließend die entsprechende Eigenschaft in Ihrem Modell:
Aktivieren Sie schließlich die clientseitige Validierung, indem Sie Ihrer Ansicht das folgende Skript hinzufügen:
Hinweis: Wir haben bereits eine Methode erstellt, mit
GetClientValidationRules
der unsere Anmerkung aus unserem Modell in die Ansicht verschoben wird.Wenn Sie Ressourcendateien verwenden, um die Fehlermeldung für die Internationalisierung bereitzustellen, entfernen Sie den
FormatErrorMessage
Aufruf (oder rufen Sie einfach die Basis auf) und optimieren Sie dieGetClientValidationRules
Methode wie folgt :quelle
Ich weiß, dass dies ein älterer Beitrag ist, wollte aber einen einfachen serverseitigen Weg teilen, um dies zu tun. Sie erstellen eine öffentliche Eigenschaft, die auf true festgelegt ist, und vergleichen Ihren Bool mit dieser Eigenschaft. Wenn Ihr Bool nicht aktiviert ist (standardmäßig false), wird das Formular nicht überprüft.
Rasiermessercode
quelle
Ich habe mehrere Lösungen ausprobiert, aber keine davon hat für mich vollständig funktioniert, um sowohl eine clientseitige als auch eine serverseitige Validierung zu erhalten. Also, was ich in meiner MVC 5-Anwendung getan habe, um sie zum Laufen zu bringen:
In Ihrem ViewModel (zur serverseitigen Validierung):
Auf Ihrer Razor-Seite (zur clientseitigen Validierung):
quelle
Ich möchte die Leute nur auf die folgende Geige hinweisen: https://dotnetfiddle.net/JbPh0X
Der Benutzer hat
[Range(typeof(bool), "true", "true", ErrorMessage = "You gotta tick the box!")]
seiner booleschen Eigenschaft hinzugefügt , wodurch die serverseitige Validierung funktioniert.Damit auch die clientseitige Validierung funktioniert, haben sie das folgende Skript hinzugefügt:
quelle
Überprüfen Sie einfach, ob die Zeichenfolgendarstellung gleich ist
True
:quelle
RegularExpressionAttribute
Wird intern verwendetConvert.ToString
, um die Zeichenfolgendarstellung des Werts der Eigenschaft abzurufen (der als übergeben wirdobject
).[Required]
Attribut steht für das Erfordernis eines beliebigen Wertes - es kann entweder wahr oder falsch sein. Dafür müssten Sie eine andere Validierung verwenden.quelle
Sie können entweder Ihr eigenes Attribut erstellen oder das CustomValidationAttribute verwenden .
So würden Sie das CustomValidationAttribute verwenden:
Dabei ist BoolValidation definiert als:
quelle
Weiterverfolgung des Beitrags von ta.speot.is und des Kommentars von Jerad Rose:
Der angegebene Beitrag funktioniert nicht clientseitig mit unauffälliger Validierung. Dies sollte in beiden Lagern (Client & Server) funktionieren:
quelle
regex
Methode unauffällig definiert, dass zuerst überprüft wird, ob das Kontrollkästchen optional ist, bevor der reguläre Ausdruck überprüft wird. Dies ist sinnvoll, mit der Ausnahme, dass jquery.validate jedes nicht aktivierte Kontrollkästchen als optional betrachtet. tl; dr Es wird die Regex nur für aktivierte Kontrollkästchen ausgeführt. Wir können einen Shim für dieregex
validator
Methode hinzufügen oder einfach einen benutzerdefinierten Validator erstellen.Haben Sie die entsprechenden Elemente in der web.config eingerichtet ?
Dies könnte dazu führen, dass die Validierung nicht funktioniert.
Sie können auch versuchen, ein benutzerdefiniertes Validierungsattribut zu erstellen (da es
[Required]
nur darum geht, ob es vorhanden ist oder nicht, und Sie sich um den Wert kümmern):Dann Verwendung:
Von hier aus .
quelle
Für ASP.NET Core MVC gibt es hier eine Client- und Server-Validierung, die auf der Lösung von dazbradbury basiert
Und dann auf dem Client:
Dann ist die Verwendung:
quelle
.NET Core MVC - Erforderliches Kontrollkästchen mit Datenanmerkungen
quelle
Ich kenne keinen Weg durch DataAnnotations, aber dies ist in Ihrem Controller einfach möglich.
Die einzige andere Möglichkeit wäre, einen benutzerdefinierten Validator für die Serverseite und einen Remote-Validator für die Client-Seite zu erstellen (Remote-Validierung ist nur in MVC3 + verfügbar).
quelle
Das hat bei mir funktioniert. Sonst nichts. Mvc 5:
Modell
Aussicht
quelle
Ich denke, der beste Weg, dies zu handhaben, besteht darin, einfach in Ihrem Controller zu überprüfen, ob das Kästchen wahr ist. Andernfalls fügen Sie Ihrem Modell einfach einen Fehler hinzu und lassen Sie es Ihre Ansicht erneut anzeigen.
Wie bereits erwähnt, muss [Erforderlich] nur sicherstellen, dass ein Wert vorhanden ist. Wenn dies nicht aktiviert ist, werden Sie immer noch falsch angezeigt.
quelle
Schauen Sie sich hier die kinderleichte Validierung an . Sie können es über Nuget herunterladen / installieren.
Es ist eine großartige kleine Bibliothek für solche Dinge.
quelle
quelle
Ich habe versucht, die Antwort von fields.cage zu verwenden, und es hat bei mir nicht ganz funktioniert, aber etwas Einfacheres hat funktioniert, und ich bin mir nicht sicher, warum (vielleicht eine andere Razor-Version?), Aber alles, was ich tun musste, war Folgendes:
Und in der .cshtml-Datei:
quelle
[NaN, NaN]
wo er sein sollte[true, true]