This is what I ended up doing i am also checking if date selected is not today..in case someone wants to do something similiar -
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public sealed class EndDateValidationAttribute : ValidationAttribute
{
private const string _defaultErrorMessage = "End date cannot be prior to start date";
public EndDateValidationAttribute(string startDate, string endDate)
: base(_defaultErrorMessage)
{
StartDateStr = startDate;
EndDateStr = endDate;
ErrorMessage = _defaultErrorMessage;
}
public string StartDateStr { get; private set; }
public string EndDateStr { get; private set; }
public DateTime StartDate { get; private set; }
public DateTime EndDate { get; private set; }
public override bool IsValid(object value)
{
// This is not a required field validator, so if the value equals null return true.
if (value == null) return true;
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value);
object startDate = properties.Find(StartDateStr, true /* ignoreCase */).GetValue(value);
object endDate = properties.Find(EndDateStr, true /* ignoreCase */).GetValue(value);
StartDate = (DateTime)startDate;
EndDate = (DateTime)endDate;
if (StartDate > EndDate) return false;
else if (Convert.ToDateTime(startDate) == DateTime.Today.Date)
{
return false;
}
return true;
}
}
Here is how you can use it -
[EndDateValidationAttribute("StartDate", "EndDate", ErrorMessage = "Start date should be after today's date and before end date!")]
public class CustomeDate
{
[DisplayName("StartDate")]
[Required(ErrorMessage = "*")]
public DateTime StartDate { get; set; }
[DisplayName("EndDate")]
[Required(ErrorMessage = "*")]
public DateTime EndDate { get; set; }
}