Одним из решений является разделение даты на поля дня, месяца и года, затем расширение RangeAttribute
Таким образом, вы получаете все преимущества встроенной проверки.
См. Пример ниже:
public class PermittedYearRangeAttribute : RangeAttribute
{
public PermittedYearRangeAttribute()
: base(1900, DateTime.Now.AddYears(-50).Year)
{
ErrorMessage = string.Format("Year must be between 1900 and {0}", DateTime.Now.AddYears(-50).Year);
}
}
В методе Global.asax.cs
Application_Start()
добавьте следующую строку
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(PermittedYearRangeAttribute), typeof(RangeAttributeAdapter));
В свойствах "Украсить модель":
[Required(ErrorMessage = "Please enter year")]
[PermittedYearRange]
public int Year { get; set; }
[Required(ErrorMessage = "Please enter day")]
[Range(1, 31, ErrorMessage = "Day must be between 1 and 31")]
public int Day { get; set; }
[Required(ErrorMessage = "Please enter month")]
[Range(1, 31, ErrorMessage = "Month must be between 1 and 12")]
public int Month { get; set; }
Предоставлено HTML:
<input class="tooltip form-control input dob--input input-validation-error" data-val="true" data-val-number="The field Year must be a number." data-val-range="Year must be between 1900 and 1965" data-val-range-max="1965" data-val-range-min="1900" data-val-required="Please enter year" id="Year" maxlength="4096" name="Year" placeholder="YYYY" tabindex="" type="text" value="0">