Besteht bei Datenanmerkungen die Möglichkeit, dass eine boolesche Eigenschaft auf "true" gesetzt wird?
%Vor%Ich würde einen Validator sowohl für die Server- als auch für die Client-Seite erstellen. Mit MVC und unaufdringlicher Formularvalidierung kann dies einfach durch folgende Schritte erreicht werden:
Erstellen Sie zuerst eine Klasse in Ihrem Projekt, um die serverseitige Validierung wie folgt durchzuführen:
%Vor%Fügen Sie anschließend die entsprechende Eigenschaft in Ihrem Modell hinzu:
%Vor%Und schließlich aktivieren Sie die clientseitige Validierung, indem Sie Ihrer Ansicht das folgende Skript hinzufügen:
%Vor% Hinweis: Wir haben bereits eine Methode GetClientValidationRules
erstellt, die unsere Annotation in die Ansicht unseres Modells verschiebt.
Wenn Sie Ressourcendateien verwenden, um die Fehlermeldung für die Internationalisierung anzugeben, entfernen Sie den Aufruf FormatErrorMessage
(oder rufen Sie einfach die Basis auf) und optimieren Sie die GetClientValidationRules
-Methode wie folgt:
Ich weiß, dass es sich um einen älteren Post handelt, aber ich wollte einen einfachen Weg auf dem Server teilen, um dies zu tun. Sie erstellen eine private Eigenschaft, die auf "true" festgelegt ist, und vergleichen Ihre bool mit dieser Eigenschaft. Wenn Ihr Bool nicht aktiviert ist (standardmäßig falsch), wird das Formular nicht validiert.
%Vor%Ich habe mehrere Lösungen ausprobiert, aber keine funktionierte vollständig für mich, um sowohl die Client- als auch die Serverseite zu validieren. Also, was ich in meiner MVC 5-Anwendung getan habe, um es zum Laufen zu bringen:
In Ihrem ViewModel (für die serverseitige Überprüfung):
%Vor%Auf Ihrer Razor-Seite (für die clientseitige Validierung):
%Vor%Sie könnten entweder Ihr eigenes Attribut erstellen oder das CustomValidationAttribute .
So würden Sie das CustomValidationAttribute verwenden:
%Vor%wobei BoolValidation definiert ist als:
%Vor% Überprüfen Sie, ob die Zeichenfolgendarstellung gleich True
ist:
[Required]
steht für den Wert any - es kann entweder wahr oder falsch sein. Sie müssten dafür eine andere Validierung verwenden.
Ich möchte nur Leute auf die folgende Geige verweisen: Ссылка
Der Benutzer hat hinzugefügt
[Range(typeof(bool), "true", "true", ErrorMessage = "You gotta tick the box!")]
auf ihre boolesche Eigenschaft, wodurch die serverseitige Validierung funktioniert.
Damit auch die clientseitige Validierung funktioniert, haben sie das folgende Skript hinzugefügt:
%Vor%Haben Sie die entsprechenden Elemente in der web.config eingerichtet? ?
Das könnte dazu führen, dass die Validierung nicht funktioniert.
Sie können auch versuchen, ein benutzerdefiniertes Validierungsattribut zu erstellen (da [Required]
nur interessiert, ob es existiert oder nicht, und Sie sich um den Wert kümmern):
Dann, Verwendung:
%Vor%Von hier .
Ich kenne keinen Weg durch DataAnnotations, aber das ist leicht in Ihrem Controller möglich.
%Vor%Die einzige andere Option wäre, einen benutzerdefinierten Validator für die Serverseite und eine zu erstellen Remote-Validierer für die Client-Seite (Remote-Validierung ist nur in MVC3 + verfügbar)
Ich denke, der beste Weg, dies zu handhaben, ist, den Controller einzuchecken, wenn das Kästchen wahr ist, andernfalls fügen Sie einfach einen Fehler zu Ihrem Modell hinzu und lassen Sie Ihre Ansicht erneut anzeigen.
Wie bereits erwähnt, stellt [Required] sicher, dass es einen Wert gibt und in Ihrem Fall, wenn Sie nicht markiert sind, erhalten Sie immer noch den Wert false.
///
/// Zusammenfassung: -CheckBox for oder input type check erforderliche Validierung funktioniert nicht die Ursache und Lösung wie folgt
///
/// Problem :
/// Der Schlüssel zu diesem Problem liegt in der Interpretation der 'erforderlichen' Regel der jQuery-Validierung. Ich habe ein wenig gegraben und einen bestimmten Code in einer jquery.validate.unobtrusive.js Datei gefunden:
/// adapter.add ("erforderlich", Funktion (Optionen) {
/// if (options.element.tagName.toUpperCase ()! == "INPUT" || options.element.type.toUpperCase ()! == "CHECKBOX") {
/// setValidationValues (Optionen, "erforderlich", wahr);
///}
///});
///
/// Beheben: (Jquery-Skript-Fix auf Seitenebene hinzugefügt, um Kontrollkästchen erforderlichen Bereich)
/// jQuery.validator.unobtrusive.adapters.add ("brequired", Funktion (Optionen) {
/// if (options.element.tagName.toUpperCase () == "INPUT" & amp; & amp; options.element.type.toUpperCase () == "CHECKBOX") {
/// options.rules ["erforderlich"] = wahr;
/// if (Optionen.Message) {
/// options.messages ["required"] = options.message;
///}
/// Fix: (C # -Code für MVC-Validierung)
/// Sie können sehen, dass es von Common RequiredAttribute erbt. Außerdem implementiert es IClientValidateable. Dies stellt sicher, dass die Regel auch auf die Client-Seite (jQuery-Validierung) übertragen wird.
///
/// Anmerkungsbeispiel:
/// [BooleanRequired]
/// öffentliche bool iAgree {bekommen; einstellen' }
///
Hier finden Sie die foolproof-Validierung . Sie können es über Nuget herunterladen / installieren.
Es ist eine großartige kleine Bibliothek für diese Art von Dingen.
Tags und Links asp.net-mvc data-annotations