Проверка DateTimePicker не работает должным образом
Сначала я использовал это решение моей проблемы:Проверка даты jQuery MVC 4 .Net 4.5.1 UK date "должна быть дата" Ошибка
Когда я публикую действительную модель, все работает просто отлично.Когда я выкладываю недействительную модель без даты, это тоже хорошо.Но когда я публикую неверную модель с датой, она заканчивается исключением: ссылка на объект не установлена на экземпляр объекта.Вот поле даты в модели:
[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy HH:mm}")]
[Display(Name = "Date")]
public DateTime Date{ get; set; }
Вот код в create.cshtml
<div class="form-group">
@Html.LabelFor(model => model.Date, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(model => model.Date, "{0:dd.MM.yyyy HH:mm}", new { @Value = ViewBag.Date, @class = "form-control", @id = "datetimepicker" })
@Html.ValidationMessageFor(model => model.Date, "", new { @class = "text-danger" })
</div>
</div>
Javascript в layout.cshtml:
<script type="text/javascript">
jQuery('#datetimepicker').datetimepicker({
format: 'd.m.Y H:i',
lang: 'cs',
dayOfWeekStart: 1
});
И вот переделанная проверка даты jQuery:
date: function (value, element) {
$.culture = Globalize.culture("cs-CZ");
var date = Globalize.parseDate(value, "dd.MM.yyyy HH:mm","cs-CZ");
return this.optional(element) ||
!/Invalid|NaN/.test(new Date(date).toString());
},
РЕДАКТИРОВАТЬ: таким образом я наконец сделал это, изменив функцию даты на регулярное выражение как это:
return value.match(/^(0?[1-9]|[12][0-9]|3[0-1])[/., -](0?[1-9]|1[0-2])[/., -](19|20)?\d{2} ([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/);