MVC 4 как подтвердить неамериканскую дату с проверкой клиента?
У меня есть ситуация, когда у меня возникают проблемы с проверкой на стороне клиента поля datetime. Когда я пытаюсь отправить его, он говорит, что дата недействительна (27/7/2013). Но если я верну дату в формат США, она будет работать (07/27/2013).
Моя модель просмотра выглядит следующим образом:
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? AuditDate { get; set; }
Index.html
@Html.TextBoxFor(m => m.AuditDate)
Я обновил свой web.config
<globalization culture="en-AU" uiCulture="en-AU" />
Что я пропустил?
Спасибо
Ответы
Ответ 1
Кто-то другой отсортировал это для меня, это все связано с проверкой JQuery на стороне клиента.
Еще раз спасибо асимптотикаFault.. вы рок..
Проблема с культурой даты MVC 4?
Вот информация из той ссылки, которую я использовал...
Проблема заключается в проверке jQuery, не учитывающей культуру при анализе даты. Если вы отключите проверку на стороне клиента, дата будет отлично разбираться на сервере, который знает о культуре.
Исправление состоит в том, чтобы переопределить проверку jQuery для даты и включить дополнительный плагин глобализации jQuery. Вы можете найти плагин globalize здесь. Вы также можете легко загрузить плагин с помощью диспетчера пакетов Nuget. Я только что открыл диспетчер пакетов, выбрал вкладку "Онлайн" слева и набрал "globalize" в поиске, и это был первый результат. Как только вы его установили, я включил эти два файла:
globalize.js
globalize.culture.en-AU.js
Вы можете включить их непосредственно с помощью тега script или поместить их в пакет, возможно, с другими файлами проверки jQuery.
После этого вам нужно будет добавить следующий script, чтобы переопределить проверку jQuery для даты:
<script type="text/javascript">
$(function () {
$.validator.methods.date = function (value, element) {
Globalize.culture("en-AU");
// you can alternatively pass the culture to parseDate instead of
// setting the culture above, like so:
// parseDate(value, null, "en-AU")
return this.optional(element) || Globalize.parseDate(value) !== null;
}
});
</script>
Ответ 2
Проблемы с проверкой клиента могут возникать из-за ошибки MVC (даже в MVC 5) в jquery.validate.unobtrusive.min.js, которая не принимает формат даты/даты.. К сожалению, вы должны решить это вручную.
Мое окончательное решение:
Вы должны включить это раньше:
@Scripts.Render("~/Scripts/jquery-3.1.1.js")
@Scripts.Render("~/Scripts/jquery.validate.min.js")
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js")
@Scripts.Render("~/Scripts/moment.js")
Вы можете установить moment.js, используя:
Install-Package Moment.js
И тогда вы можете, наконец, добавить исправление для синтаксиса формата даты:
$(function () {
$.validator.methods.date = function (value, element) {
return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid();
}
});
Ответ 3
При использовании проверки jQuery для дат вы обнаружите, что он не подходит для дат с помощью Chrome. Это происходит, если вы используете неамериканский язык.
Решение представлено в Фиксация jQuery неамериканской проверки даты для Chrome
Ответ 4
Попробуйте с этим,
Просмотр
<div>
@Html.LabelFor(m => m.DOB)
@Html.TextBoxFor(m => m.DOB, new { @Formate = "dd/MM/yyyy" })
@Html.ValidationMessageFor(m => m.DOB)
</div>
Model
[DisplayName("Date Of Birth")][DataType(DataType.Date)]
public DateTime DOB { get; set; }