190 votes

Comment spécifier une décimale minimale mais non maximale à l'aide de l'attribut d'annotation de données de plage?

Je voudrais spécifier qu'un champ décimal pour un prix doit être> = 0 mais je ne veux pas vraiment imposer une valeur max.

Voici ce que j'ai jusqu'à présent ... Je ne sais pas quelle est la bonne façon de procéder.

 [Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
 

287voto

Jacob Points 421

Que diriez-vous quelque chose comme ça:

 [Range(0.0, Double.MaxValue)]
 

Cela devrait faire ce que vous cherchez et vous pouvez éviter d'utiliser des chaînes.

49voto

user169867 Points 1404

Eh bien, il semble qu’il n’y ait pas d’autre choix que de saisir manuellement la valeur maximale. J'espérais qu'il y avait un type de surcharge pour lequel vous n'aviez pas besoin de le spécifier.

 [Range(typeof(decimal), "0", "79228162514264337593543950335")] public decimal Price { get; set; } 
 

40voto

Nicolai Schlenzig Points 137

Vous pouvez utiliser:

 [Min(0)]
 

Cela imposera une valeur minimale requise de 0 (zéro) et aucune valeur maximale.

Vous avez besoin de DataAnnotationsExtensions pour l'utiliser.

23voto

jfar Points 19380

Si vous travaillez avec des prix, je suis sûr que vous pouvez supposer que rien ne coûtera plus d'un quadrillion de dollars. ;)

J'utiliserais:

 [Range(0.0, 1000000000000)]
 

Ou, si vous en avez vraiment besoin, il vous suffit de coller la valeur de Decimal.MaxValue (sans les virgules): 79 228,162,514,264,337,593,543,950,335

L'un ou l'autre de ceux-ci fonctionnera bien si vous n'êtes pas du Zimbabwe.

13voto

Erikas Pliauksta Points 426

Vous pouvez utiliser la validation personnalisée:

     [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
    public int IntValue { get; set; }

    [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
    public decimal DecValue { get; set; }
 

Type de méthodes de validation:

 public class ValidationMethods
{
    public static ValidationResult ValidateGreaterOrEqualToZero(decimal value, ValidationContext context)
    {
        bool isValid = true;

        if (value < decimal.Zero)
        {
            isValid = false;
        }

        if (isValid)
        {
            return ValidationResult.Success;
        }
        else
        {
            return new ValidationResult(
                string.Format("The field {0} must be greater than or equal to 0.", context.MemberName),
                new List<string>() { context.MemberName });
        }
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X