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?

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top