Comment faire la validation du modèle entier en asp.net mvc 2
-
30-09-2019 - |
Question
J'ai un formulaire d'inscription et l'utilisateur doit entrer la superficie de leur maison. Je voudrais que cette valeur soit seulement un entier. Est-il possible de valider cette valeur en utilisant les attributs asp.net mvc?
La solution
oui, il est, mais vous devrez faire une version plate de l'objet que vous êtes désireux de créer, parce que la validation des attributs ne court après MVC a converti vos données dans le modèle. qui, lorsque votre valeur est un int, ne parviendra pas à valider si l'utilisateur n'a pas un int, et vous obtiendrez un message d'erreur MVC au lieu de votre errormessage.
vous pouvez poster l'objet que vous êtes désireux de faire?
avec une version plate je veux dire tous les datetimes et ints sont piqûres dans la version plat.
puis-je utiliser ceci:
[DisplayName("Square meters")]
[PosNumberNoZero(ErrorMessage = "need a positive number, bigger than 0")]
public string squaremeters { get; set; }
dans le même fichier
public class PosNumberNoZeroAttribute : ValidationAttribute {
public override bool IsValid(object value) {
if (value == null) {
return true;
}
int getal;
if (int.TryParse(value.ToString(), out getal)) {
if (getal == 0)
return false;
if (getal > 0)
return true;
}
return false;
}
}
si mon ModelState est valide, j'utilise AutoMapper pour convertir mon FlatModel dans mon modèle, qui est à seulement 2 lignes de code.
edit: si 0 est un numéro valide:
public class PosNumberAttribute : ValidationAttribute {
public override bool IsValid(object value) {
if (value == null) {
return true;
}
int getal;
if (int.TryParse(value.ToString(), out getal)) {
if (getal >= 0)
return true;
}
return false;
}
}
Autres conseils
a déjà en rendre compte reçu une réponse, mais la réponse de Stefanvds est uneccessarily compliquée. Il suffit d'utiliser CVM construit dans les attributs de validation:
[DisplayName("Square Feet")]
[Required(ErrorMessage = "Square Feet is Required")]
[Range(0, int.MaxValue, ErrorMessage = "Square Feet must be a positive number")]
public int SquareFeet { get; set; }
Je l'habitude d'utiliser l'attribut plage comme ceci:
int positif:
[Range(0,int.MaxValue)]
public int Id { get; set; }
int négatif:
[Range(int.MinValue,-1)]
public int Id { get; set; }
Tous int:
[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }
Eh bien en utilisant Range
pour un champ int
ne fonctionnera pas si vous avez des lettres comme « a ».
Le Handler
d'erreur n'est pas appelé (ASP.NET 1.0 RC2 CORE).