validator - validar rango numeros textbox c#
¿Cómo especificar un decimal mínimo pero no máximo utilizando el atributo de anotación de datos de rango? (9)
Me gustaría especificar que un campo decimal para un precio debe ser> = 0, pero realmente no quiero imponer un valor máximo.
Esto es lo que tengo hasta ahora ... No estoy seguro de cuál es la forma correcta de hacerlo.
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
Bueno, parece que no hay más remedio que poner el valor máximo manualmente. Esperaba que hubiera algún tipo de sobrecarga donde no necesitaras especificar uno.
[Range(typeof(decimal), "0", "79228162514264337593543950335")
] public decimal Price { get; set; }
Iba a intentar algo como esto:
[Range(typeof(decimal), ((double)0).ToString(), ((double)decimal.MaxValue).ToString(), ErrorMessage = "Amount must be greater than or equal to zero.")]
El problema al hacer esto, sin embargo, es que el compilador quiere una expresión constante, que no permite ((double)0).ToString()
. El compilador tomará
[Range(0d, (double)decimal.MaxValue, ErrorMessage = "Amount must be greater than zero.")]
Me gustaría poner decimal.MaxValue.ToString()
ya que este es el techo efectivo para el tipo de decmial es equivalente a no tener un límite superior.
Puede usar validación personalizada:
[CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
public int IntValue { get; set; }
[CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
public decimal DecValue { get; set; }
Tipo de métodos de validación:
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 });
}
}
}
Puedes usar:
[Min(0)]
Esto impondrá un valor mínimo requerido de 0 (cero) y ningún valor máximo.
Necesita DataAnnotationsExtensions para usar esto.
Qué tal algo como esto:
[Range(0.0, Double.MaxValue)]
Eso debería hacer lo que estás buscando y puedes evitar usar cadenas.
Si está trabajando con precios estoy seguro de que puede asumir que nada costará más de 1 billón de dólares.
Yo usaría:
[Range(0.0, 1000000000000)]
O si realmente lo necesita, simplemente pegue el valor de Decimal.MaxValue (sin las comas): 79,228,162,514,264,337,593,543,950,335
Cualquiera de estos funcionará bien si no eres de Zimbabwe.
Si le preocupa que la cadena se vea bien, puede hacer esto:
[Range(0, Double.PositiveInfinity)]
Esto tendrá un mensaje de error predeterminado de:
El campo SuchAndSuch debe estar entre 0 e Infinity.
usando Range con
[Range(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]
[Range(typeof(Decimal),"0.0", "1000000000000000000"]
Espero que ayude