Вы можете привязывать валидаторы к классам вместо свойств.Я хотел бы сделать что-то вроде этого:
//The Model
[DateValidator]
public class Date
{
public string Month { get; set; }
public string Day { get; set; }
public string Year { get; set; }
}
//The DataAnnotation
[AttributeUsage(AttributeTargets.Class)]
class DateValidatorAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var date = value as Date;
Debug.Assert(date != null);
var dateString = date.Month + date.Day + date.Year;
DateTime dateTime;
var isValid = DateTime.TryParseExact(dateString, "ddMMyyyy", CultureInfo.InvariantCulture, DateTimeStyles.None,
out dateTime);
return isValid;
}
}
Редактировать
DateTime.TryParseExact ДЕЙСТВИТЕЛЬНО проверяет действительность DateTime (то есть он вернет false, если вы попытаетесь проанализировать 30/02/2011).