tutorial side net mvc form entre diferencias asp c# asp.net-mvc int model-validation

side - razor c#



Cómo hacer la validación del modelo entero en asp.net mvc 2 (4)

Tengo un formulario de registro y el usuario debe ingresar los pies cuadrados de su casa. Me gustaría que este valor sea solo un número entero. ¿Hay alguna manera de validar este valor usando atributos asp.net mvc?


sí, lo es, pero deberá crear una versión plana del objeto que desea crear, porque la validación con atributos solo se ejecuta DESPUÉS de que MVC haya convertido sus datos en el modelo. que, cuando su valor es un int, no podrá validar si el usuario no ingresó un int, y obtendrá un mensaje de error MVC en lugar de su mensaje de error.

¿puedes publicar el objeto que quieres hacer?

con una versión plana me refiero a todas las fechas y fechas son picaduras en la versión plana.

entonces 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 modelo es válido entonces, uso AutoMapper para convertir mi FlatModel en mi Modelo, que es solo 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; } }


Darse cuenta de que esto ya ha sido respondido, pero la respuesta de Stefanvds es complicada de forma innecesaria. Solo use los atributos de validación integrados de MVC:

[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; }


Usualmente uso el atributo range como este:

Positivo int:

[Range(0,int.MaxValue)] public int Id { get; set; }

Negativo int:

[Range(int.MinValue,0)] public int Id { get; set; }

Cualquier int:

[Range(int.MinValue,int.MaxValue)] public int Id { get; set; }


El uso de Range para un campo int no funcionará si tiene algunas letras como "a".
El Handler errores no se llama (ASP.NET CORE 1.0 RC2).