J'ai un formulaire d'inscription et l'utilisateur doit entrer la superficie en pieds carrés de leur maison. Je voudrais que cette valeur soit seulement un entier. Existe-t-il un moyen de valider cette valeur en utilisant les attributs asp.net mvc?Comment faire la validation de modèle Integer dans asp.net mvc 2
Répondre
oui, oui, mais vous devrez créer une version plate de l'objet que vous souhaitez créer, car la validation avec les attributs ne fonctionne qu'après avoir converti vos données dans le modèle. ce qui, quand votre valeur est un int, échouera à valider si l'utilisateur n'a pas entré un int, et vous obtiendrez un message d'erreur MVC au lieu de votre message d'erreur.
pouvez-vous poster l'objet que vous voulez faire?
avec une version à plat, je veux dire toutes les dates et ints sont des 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 valable, je l'utilise AutoMapper pour convertir mon FlatModel dans 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;
}
}
Rendez-vous compte ce qui a déjà reçu une réponse, mais la réponse de Stefanvds est uneccessarily compliquée. Il suffit d'utiliser CVM construit en 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; }
For Range, le système a un ErrorMessage "Le champ XXX doit être entre XXX et XXX." Le message d'erreur est donc facultatif. –
Oui, vous avez raison. Mais le CustomMessage personnalisé est beaucoup plus convivial que: "Le champ Square Feet doit être entre 0 et 2147483647". ;) –
Au moins dans MVC2 cela ne fonctionne pas si les données transmises ne sont pas des nombres entiers valides.Le framework transmettra la valeur par défaut qui est 0 et la validation réussira, mais échouera plus tard lorsque le framework va réellement instancier le modèle et qu'il ne peut pas convertir les données en entier. Il met en place le message d'erreur par défaut à ce moment-là. –
Je l'habitude d'utiliser l'attribut plage comme ceci:
Positif int:
[Range(0,int.MaxValue)]
public int Id { get; set; }
négatif int:
[Range(int.MinValue,0)]
public int Id { get; set; }
Tout int :
[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }
Bien utiliser Range
pour un champ int
ne fonctionnera pas si vous avez des lettres comme "a".
L'erreur Handler
n'est pas appelée (ASP.NET CORE 1.0 RC2).
beaucoup plus facile à utiliser une expression régulière ici: http://stackoverflow.com/questions/5661569/regular-expression-to-match-numbers-only-not-starting-with-zero – GP24