Modèle ASP.Net MVC 2 Validation Regex Validator échoue
-
02-10-2019 - |
Question
Je suit la propriété dans mon modèle classe métadonnées:
[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; }
Mais chaque fois que je l'appelle ModelState.IsValid
retourne toujours faux, car regex ne valide pas. J'avons identifié la date entrée (29/08/2010) contre les nouveaux regex en utilisant même modèle et correspond parfaitement.
Qu'est-ce que je fais mal?
La solution
C'est parce que regex applique aux chaînes et non des propriétés DateTime
. Si l'utilisateur entre une chaîne non valide qui ne peut être analysé à une instance de DateTime
du modèle liant, il ajoutera un message d'erreur générique avant votre motif exécute regex.
Vous avez deux possibilités:
- Personnaliser le message d'erreur dans un fichier de ressources
- Ecrire un liant modèle personnalisé
- Utilisez un propriété de chaîne (je me sens coupable de proposer ceci: -))
Autres conseils
il y a un autre actualy solution de contournement pour cela. Vous pouvez simplement sous-classe le 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;
}
}
dans vos Global.asax.cs au démarrage de l'application enregistrer le addapter de RegularExpression pour la validation du côté client comme ceci:
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(DateFormatValidatorAttribute),
typeof(RegularExpressionAttributeAdapter));
Maintenant, vous devez avoir l'accumulation dans le côté client validateur exression régulière MVC et garder le DateTime comme type de propriété