Я видел множество вопросов и ответов по этой проблеме, но я до сих пор не могу найти рабочее решение. У меня есть Bootstrap .Datepicker для ввода даты в формате dd/mm/yyyy
. Я понимаю, что по некоторым причинам настройки глобализации являются американскими, например mm/dd/yyyy
. Я сделал все, например, добавив lang="en"
и установив локализацию в Web.config
<system.web>
<globalization culture="en-GB" uiCulture="en-GB" enableClientBasedCulture="true" requestEncoding="utf-8" responseEncoding="utf-8" />
...
</system.web>
Для моей модели установлено следующее значение:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime RegistrationDate { get; set; }
Элемент модели моего вида выглядит примерно так , Я использую модель представления, потому что у меня есть две формы, и я хочу, чтобы они были проверены отдельно.
[Required]
[Display(Name = "Date Qualified as instructor")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime RegistrationDate { get; set; }
Входные данные в представлении:
<div class="form-group col-md-6">
@Html.LabelFor(m => m.DrivingInstructor.RegistrationDate)
@Html.TextBoxFor(m => m.DrivingInstructor.RegistrationDate,"{0:dd/mm/yyyy}", new { @class = "form-control datepicker", placeholder = "dd/mm/yyyy"})
@Html.ValidationMessageFor(m => m.DrivingInstructor.RegistrationDate)
</div>
Наконец, здесь указатель даты и конфигурация проверки js:
$(document).ready(function () {
$(function () {
//validation
$.validator.addMethod('date',
function (value, element) {
if (this.optional(element)) {
return true;
}
var ok = true;
try {
$.datepicker.parseDate('dd/mm/yyyy', value);
}
catch (err) {
ok = false;
}
return ok;
});
//datepicker configuration
$('.datepicker').datepicker({
format: "dd/mm/yyyy",
startDate: "01/01/1940",
endDate: "today",
autoclose: true,
maxViewMode: 3,
todayHighlight: true
});
});
});
Я нашел этот пост о исправлении проверки , но это еще больше усугубило проблемы. Поскольку до исправления я мог вводить даты, такие как 01.01.2020, и они не запускали проверку. При проверке, указанной выше, все введенные даты считаются недействительными. Есть хороший способ заставить его работать, или я должен просто удалить datepicket и использовать текстовое поле с регулярным выражением, настроенным для проверки dd/mm/yyyy
?