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?

¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top