У меня строго типизированное представление, привязанное к ViewModel, одной из целей которого является регистрация даты рождения клиентов. Для этого у меня есть несколько полей в ViewModel, определенных следующим образом:
public DateTime DOB {get;set;}
public int? DOBDay
{
get
{
return _DOBDay;
}
set
{
_DOBDay = value;
SetDOB();
}
}
public int? DOBMonth
{
get
{
return _DOBMonth;
}
set
{
_DOBMonth = value;
SetDOB();
}
}
public int? DOBYear
{
get
{
return _DOBYear;
}
set
{
_DOBYear = value;
SetDOB();
}
}
public List<SelectListItem> DOBDayItems { get; set; }
public List<SelectListItem> DOBMonthItems { get; set; }
public List<SelectListItem> DOBYearItems { get; set; }
protected void SetDOB()
{
if (this.DOBDay.HasValue && this.DOBMonth.HasValue && this.DOBYear.HasValue)
{
DateTime dob = new DateTime(this.DOBYear.Value, this.DOBMonth.Value, this.DOBDay.Value);
//Check within smalldatetime range
if (dob < new DateTime(2079, 6, 6) && dob > new DateTime(1900, 1, 1))
{
this.DOB = dob;
}
}
}
Это облегчает 3 раскрытия в моей форме, привязанных к DOBDay, DOBMonth и DOBYear соответственно (нет. Это оказалось самым простым методом ввода даты рождения в ряде проведенных нами экспериментов по тестированию пользовательского опыта). DOB затем устанавливается каждый раз, когда любой из них изменяется, что прекрасно работает.
Я использую DataAnnotations для проверки формы, которая отлично подходит для проверки каждого из 3 раскрывающихся списков (обязательные / максимальные значения), однако для подтверждения того, что DOB является действительной датой, требуется дополнительная проверка - 30 февраля 1985 года пройдет однако отдельная проверка выпадающего списка недействительна. Я хотел бы, чтобы это выделило все 3 элемента управления, но потенциально может быть запущено только из выпадающего списка DOBYear, но я не уверен, как это сделать - возможно ли это?