visual validator validar solo rango rangevalidator numeros net minimo longitud ejemplo caracteres asp c# .net asp.net-mvc data-annotations

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