ASP.Net MVC 2 Modellvalidierung Regex Validator schlägt fehl
-
02-10-2019 - |
Frage
Ich habe folgende Eigenschaft in meinem Modell Metadata-Klasse:
[Required(ErrorMessage = "Spent On is required")]
[RegularExpression(@"[0-1][0-9]/[0-3][0-9]/20[12][0-9]",
ErrorMessage = "Please enter date in mm/dd/yyyy format")]
[DataType(DataType.Date)]
[DisplayName("Spent On")]
public DateTime SpentOn { get; set; }
Aber wenn ich ModelState.IsValid
nenne es gibt immer falsch, weil regex Validierung nicht. Ich habe das eingegebene Datum (2010.08.29) gegen neue regex gleiche Muster abgestimmt und sie paßt perfekt.
Was mache ich falsch?
Lösung
Das ist, weil regex in Strings und nicht DateTime
Eigenschaften gilt. Gibt der Benutzer eine ungültige Zeichenfolge, die nicht auf eine DateTime
Instanz aus dem Modell analysiert werden kann Bindemittel eine allgemeine Fehlermeldung, bevor Sie RegexMuster ausführt hinzufügen.
Sie haben ein paar Möglichkeiten:
- Anpassen der Fehlermeldung in einer Ressourcendatei
- Schreiben Sie eine benutzerdefinierte Modell Binder
- Verwenden Sie eine String-Eigenschaft (Ich fühle mich schuldig dies für den Vorschlag: -))
Andere Tipps
Actualy gibt es eine andere Abhilfe für dieses. Sie können einfach eine Unterklasse der RegularExpressionAttribute
public class DateFormatValidatorAttribute : RegularExpressionAttribute {
public DateFormatValidatorAttribute()
: base(@"[0-1][0-9]/[0-3][0-9]/20[12][0-9]")
{
ErrorMessage = "Please enter date in mm/dd/yyyy format";
}
public override bool IsValid(object value) {
return true;
}
}
in Ihrem Global.asax.cs beim Start der Anwendung registrieren, um die RegulaererAusdruck addapter für die Client-seitige Validierung wie folgt:
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(DateFormatValidatorAttribute),
typeof(RegularExpressionAttributeAdapter));
Jetzt erhalten Sie die Build-in MVC regelmäßigen exression Validator Client-Seite zu haben und die Datetime als Objekttyp halten