¿Cómo hacer la validación del modelo de enteros en asp.net mvc 2
-
30-09-2019 - |
Pregunta
Tengo un formulario de inscripción y el usuario debe introducir los metros cuadrados de su casa. Me gustaría que este valor sea solamente un entero. ¿Hay una manera de validar este valor utilizando atributos asp.net mvc?
Solución
Sí, lo es, pero usted tendrá que hacer una versión plana del objeto que está deseando para crear, debido a que la validación con los atributos sólo se ejecuta después de MVC ha convertido sus datos en el modelo. el cual, cuando su valor es un entero, se producirá un error para validar si el usuario no entró en un int, y obtendrá un mensaje de error MVC en lugar de su ErrorMessage.
se puede colocar el objeto que se quieran hacer?
con una versión plana me refiero a todos datetimes y enteros son picaduras en la versión plana.
Luego uso esto:
[DisplayName("Square meters")]
[PosNumberNoZero(ErrorMessage = "need a positive number, bigger than 0")]
public string squaremeters { get; set; }
en el mismo archivo
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 mi ModelState es válida, entonces, yo uso AutoMapper convertir mi FLATModel en mi modelo, que está a sólo 2 líneas de código.
editar: si 0 es un número válido:
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;
}
}
Otros consejos
dan cuenta de esto ya ha sido contestada, pero la respuesta Stefanvds' es complicado uneccessarily. Sólo tiene que utilizar los AT construidas en los atributos de validación:
[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; }
Yo suelo usar el atributo de rango como esto:
int positivo:
[Range(0,int.MaxValue)]
public int Id { get; set; }
int Negativo:
[Range(int.MinValue,-1)]
public int Id { get; set; }
Cualquier int:
[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }
Bueno usando Range
para un campo int
no funcionará si usted tiene algunas letras como la "a".
El Handler
error no se llama (ASP.NET NÚCLEO 1.0 RC2).