web-dev-qa-db-fra.com

Comment faire une validation de modèle entière dans ASP.NET MVC 2

J'ai un formulaire d'inscription et l'utilisateur doit entrer dans la superficie carrée de leur maison. Je voudrais que cette valeur soit seulement un entier. Existe-t-il un moyen de valider cette valeur à l'aide des attributs ASP.NET MVC?

21
Luke101

oui, c'est, mais vous devrez faire une version plate de l'objet que vous souhaitez créer, car la validation avec les attributs ne fonctionne que lorsque MVC a converti vos données dans le modèle. Lequel, lorsque votre valeur est une INT, ne parviendra pas à valider si l'utilisateur ne saisit pas d'int, et vous obtiendrez un message d'erreur MVC à la place de votre errorressage.

pouvez-vous poster l'objet que vous souhaitez faire?

avec une version plate, je veux dire que tous les denttimes et INTS sont des piqûres dans la version plate.

ensuite, j'utilise 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 modèle de modèle est valide, j'utilise automapper pour convertir mon écran plat en mon modèle, qui ne suffit que 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;
    }
}
26
Stefanvds

Réalisez que cela a déjà été répondu, mais la réponse de Stefanvds est compliquée de manière non coopérée. Utilisez simplement des attributs de validation intégrés aux MVC:

[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; }
68
Tom Glenn

J'utilise habituellement l'attribut de la plage comme ceci:

POSITIVE INT:

[Range(0,int.MaxValue)]
public int Id { get; set; }

Négatif Int:

[Range(int.MinValue,-1)]
public int Id { get; set; }

Tout int:

[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }
7
Zapnologica