MVC 4 Entity Framework 6.1 DataAnnotationValidator Ошибочные даты

У меня есть модель EF, которая использует DataAnnotationValidator.cs в качестве универсального класса для проверки. Мне нравится этот подход, за исключением типов данных даты. Я нашел много информации о проверке всего, кроме дат. Как вы проверяете дату, используя эту технику? Следующее отображает дату правильно, но допускает любой ввод с правильным форматированием в качестве допустимой даты: 32/32/2014 проходит тест, а 32//2014 – нет.

Я пробовал это с [DataType (DataType.DateTime)] и без него. Я пробовал RegularExpression без успеха. Я должен что-то упустить. Любая помощь приветствуется. Спасибо.

 [MetadataType(typeof(v_Demographics_Metadata))]
 public partial class v_Demographics
 {
 }
 class v_Demographics_Metadata
 {
 [Display(Name = "Date of Birth"), DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
 [DataType(DataType.DateTime)]
 public Nullable<System.DateTime> DateOfBirth { get; set; }
 }

ОБНОВЛЕНИЕ: найдено это решение. Модифицировал следующим образом. Хотя это не совсем то, что я хотел сделать, пока это работает хорошо. Мне просто нужно добавить некоторую проверку в jQuery

Создал DateTime.cshtml в \Shared\EditorTemplates со следующим:

 @model System.DateTime?
 @Html.TextBox("", String.Format("{0:d}", Model.HasValue ? Model : DateTime.Today), new { @class = "dp" })

Я добавил следующий jQuery в свой DemographicsView. Я планирую протестировать jQuery в _Layout.cshtml, чтобы увидеть, как это влияет на весь сайт.

<script type="text/javascript">
$(document).ready(function () {
    $('.dp').datepicker({
        changeMonth: true,
        changeYear: true,
        showOn: "button",
        buttonImage: "/Images/calendar.gif",
        buttonImageOnly: true
    });
});
</script>

person lv2rftak    schedule 02.04.2014    source источник
comment
Вы видели этот ответ?   -  person Jasen    schedule 03.04.2014
comment
Спасибо. Я рассматривал такой тип решения. Я просто хотел убедиться, что не пропустил некоторые встроенные функции, подобные приведенным ниже, которые отлично работают. [Display(Name = Social Security Number)] [RegularExpression(@^\d{3}-\d{2}-\d{4}$, ErrorMessage = Пожалуйста, используйте этот формат: nnn-nn-nnnn, включая тире .)] общедоступная строка SocialSecurityNumber { get; набор; }   -  person lv2rftak    schedule 03.04.2014
comment
Один из вариантов — передать дату в виде тиков между клиентом и сервером. Получите тики из javascript, а затем преобразуйте их в DateTime на сервере.   -  person Jasen    schedule 03.04.2014
comment
Опубликуйте свое решение как новый ответ.   -  person Jasen    schedule 03.04.2014
comment
Я сделаю это, как только получу часть подтверждения. Спасибо.   -  person lv2rftak    schedule 03.04.2014