Comment faire la validation de modèle entier dans asp.net mvc 2
j'ai un formulaire d'inscription et l'utilisateur doit entrer la superficie de leur maison. Je voudrais que cette valeur soit seulement un nombre entier. Y a-t-il un moyen de valider cette valeur en utilisant des attributs asp.net mvc?
4 réponses
oui, il est, mais vous aurez à faire un plat de version de l'objet que vous êtes désireux de créer, parce que la validation avec les attributs ne s'exécute APRÈS le MVC a converti vos données dans le modèle. qui, lorsque votre valeur est un int, ne pourra pas valider si l'utilisateur n'a pas entré un int, et vous obtiendrez un message d'erreur MVC au lieu de votre errormessage.
pouvez-vous poster l'objet que vous voulez faire?
avec une version plate, Je veux dire que toutes les dates et heures sont piqûres dans la version plate.
puis-je utiliser ceci:
[DisplayName("Square meters")]
[PosNumberNoZero(ErrorMessage = "need a positive number, bigger than 0")]
public string squaremeters { get; set; }
dans le 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 alors, J'utilise AutoMapper pour convertir mon FlatModel en mon modèle, qui est seulement 2 lignes de code.
edit: si 0 est un nombre 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;
}
}
réalisez que cela a déjà été répondu, mais la réponse de Stefanvds est incroyablement compliquée. Il suffit d'utiliser les attributs de validation mvcs intégrés:
[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; }
j'utilise habituellement l'attribut range comme ceci:
Positif int:
[Range(0,int.MaxValue)]
public int Id { get; set; }
négatif int:
[Range(int.MinValue,-1)]
public int Id { get; set; }
int:
[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }
Bien à l'aide de Range
pour un int
champ ne fonctionnera pas si vous avez quelques lettres comme "un".
L'erreur Handler
n'est pas appelé (ASP.NET CORE 1.0 RC2).