2010-05-26 14 views
14

que tienen una anotación [Rango] que tiene este aspecto:¿Anotación de rango entre nada y 100?

[Range(0, 100)] 
public int AvailabilityGoal { get; set; } 

Mi página web es el siguiente:

<%=Html.TextBoxFor(u => u.Group.AvailabilityGoal)%> 

Funciona como debe ser, sólo puedo introducir valores entre 0 y 100, pero También quiero que el cuadro de entrada sea opcional, el usuario no debería obtener un error de validación si el cuadro de entrada está vacío. Esto no tiene nada que ver con el rango, sino porque el tipo es un número entero. Si el usuario lo deja vacío, debe hacer que el objetivo de disponibilidad sea = 0, pero no quiero obligar al usuario a ingresar un cero.

He intentado esto, pero (obviamente) no funcionó:

[Range(typeof(int?), null, "100")] 

¿Es posible resolver esto con anotaciones de datos o de alguna otra manera?

Gracias de antemano.

Bobby

+0

newbie en las anotaciones: ¿qué tal si no es cero? > 0 o <0 pero no cero – codeputer

Respuesta

22

Usted no debería tener que cambiar el atributo [Rango], como [Rango] y otros elementos de construcción en DataAnnotations validadores no operación cuando se le da un valor vacío. Simplemente haga la propiedad en sí del tipo int? en lugar de int. Las propiedades ValueType no anulables (como int) siempre se requieren automáticamente.

+0

Esto funcionó como yo quería, más fácil de lo que pensaba. Gracias. – Bobby

5

Creo que se puede anular el objeto Range y añadir este comportamiento.

public class OptionalRange : RangeAttribute { 
    public override bool IsValid(object value) { 
     if (value == null || (int)value == 0) return true; 
     return base.IsValid(value); 
    } 
} 
+0

Si usa la validación de rango en un int nullable que NO está marcado como obligatorio, seguirá fallando la validación en el navegador cuando no ingrese un valor. Anular el atributo como mencionó anteriormente no cambia este comportamiento. Estoy probando esto con MVC 5.2.3 en un formulario Razor. – jrichview

Cuestiones relacionadas