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; }
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; }
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.
Si vous êtes préoccupé par la ficelle Nice, vous pouvez le faire:
[Range(0, Double.PositiveInfinity)]
Cela aura un message d'erreur par défaut de:
Le champ SuchAndSuch doit être compris entre 0 et Infinity.
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.
Si vous travaillez avec des prix, je suis sûr que vous pouvez supposer que rien ne coûtera plus de 1 billion 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.
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 });
}
}
}
[Plage (0.01,100000000, ErrorMessage = "Le prix doit être supérieur à zéro!")]
Je mettrais decimal.MaxValue.ToString()
puisqu'il s'agit du plafond effectif pour le type décimal, cela équivaut à ne pas avoir de limite supérieure.
J'allais essayer quelque chose comme ça:
[Range(typeof(decimal), ((double)0).ToString(), ((double)decimal.MaxValue).ToString(), ErrorMessage = "Amount must be greater than or equal to zero.")]
Le problème avec cela, cependant, est que le compilateur veut une expression constante qui interdit ((double)0).ToString()
. Le compilateur will take
[Range(0d, (double)decimal.MaxValue, ErrorMessage = "Amount must be greater than zero.")]
en utilisant Range avec
[Range(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]
[Range(typeof(Decimal),"0.0", "1000000000000000000"]
J'espère que ça va aider