Подтвердить что ты не робот

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" />

Что я пропустил?

Спасибо

4b9b3361

Ответ 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();
    }
});

Ответ 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; }