2012-01-13 16 views
12

tengo este atributo DateTime en mi modelo:Restringir valor DateTime con anotaciones de datos

[Required(ErrorMessage = "Expiration Date is required")] 
[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)] 
[DisplayName("Expiration Date")] 
public DateTime? ExpirationDate { get; set; } 

me gustaría este atributo para ser validado de manera que el usuario no puede introducir una fecha que se produjo antes de hoy. Si estuviera validando un número entero, podría hacer esto.

[Range(1, int.MaxValue, ErrorMessage = "Value must be greater than 0")] 

Pero el atributo de rango no admite un objeto DateTime. ¿Hay algo como esto para un valor de DateTime?

+0

posible duplicado: http://stackoverflow.com/questions/1406046/data-annotation-ranges-of-dates –

+0

O tal vez una de las respuestas de esta pregunta relacionada: http://stackoverflow.com/ questions/5390403/datetime-date-and-hour-validation-with-data-annotation –

+0

No estoy 100% seguro de que esto se relacione, pero tal vez el MSDN DateTimeRangeValidator: http://msdn.microsoft.com/en-us/ library/ff649440.aspx –

Respuesta

32

Esto debería ayudarlo.

public class MyDateAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value)// Return a boolean value: true == IsValid, false != IsValid 
    { 
     DateTime d = Convert.ToDateTime(value); 
     return d >= DateTime.Now; //Dates Greater than or equal to today are valid (true) 

    } 
} 

Ahora aplique este atributo a su propiedad de modelo.

public class SomeModel 
    { 
     [Display(Name = "Date of birth")] 
     [MyDate(ErrorMessage ="Invalid date")] 
     public DateTime DateOfBirth { get; set; } 
    } 
+2

Puede usar como [MyDate (ErrorMessage = "Su mensaje aquí")] – Parminder

Cuestiones relacionadas