Как исправить региональные настройки для jQuery datepicker, чтобы он работал в Firefox и IE7?

Я с помощью jQuery с datepicker и MVC4 с asp.net . Datepicker работает в Firefox, но в IE7 я получаю сообщение через asp.net проверка того, что поле не является датой.

это код для datepicker

if (!Modernizr.inputtypes.date) {
        $(function() {
            $.datepicker.setDefaults($.datepicker.regional['en-GB']);
            $(".datefield").datepicker();
        });
    }

Это моя настройка глобализации в Интернете.config

<globalization uiCulture="en-GB" culture="en-GB" />

например. в Firefox дата отображается как строка" 19/03/2012 " и принимается asp.net настройка проверки (на стороне клиента и сервера). В IE7 в та же строка даты не принимается на клиенте. Если я изменю его на "03/19/2012", клиент примет дату, но затем сервер выдаст исключение - " InvalidOperationException. Объект Nullable должен иметь значение."

моя viewModel использует нулевое DateTime, которое я приведу к ненулевому DateTime в действии post контроллеров. Это работает в Firefox, но в IE7 значение для даты из viewModel равно null. В чем проблема?

2 ответов


следующая строка ничего не делает:

$.datepicker.setDefaults($.datepicker.regional['en-GB']);

если не указывать соответствующий языковой файл который не включен по умолчанию в ASP.NET шаблон MVC 4.

вы можете попробовать установить формат явно:

$.datepicker.setDefaults({ dateFormat: 'dd/mm/yy' });

но это касается только того, как дата должна быть отформатирована после ее выбора в datepicker. Это не имеет ничего общего с проверкой.

проверка на стороне клиента выполняется с помощью jquery.validate плагин, который, в свою очередь, использует либо настроенную в настоящее время культуру браузера (что может объяснить расхождения, которые вы наблюдаете между FF и IE, например, один может быть настроен на использование en-GB и другой en-US) или даты ISO.

вы можете переопределить эту пользовательскую проверку и использовать свой пользовательский формат, чтобы гарантировать, что это будет работать через браузер:

if (!Modernizr.inputtypes.date) {
    $(function () {
        $.datepicker.setDefaults({ dateFormat: 'dd/mm/yy' });
        $('.datefield').datepicker();
    });

    jQuery.validator.addMethod(
        'date',
        function (value, element, params) {
            if (this.optional(element)) {
                return true;
            };
            var result = false;
            try {
                $.datepicker.parseDate('dd/mm/yy', value);
                result = true;
            } catch (err) {
                result = false;
            }
            return result;
        },
        ''
    );
}

файлы локализации Jquery доступны по адресу:

http://nuget.org/packages/jQuery.UI.i18n

просто наберите :

установить-пакет jQuery.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.как i18n и добавьте ссылку на скрипт на "Scripts/jquery-ui-i18n.js"

из консоли диспетчера пакетов, то это будет работать: $.элемент управления datepicker.setDefaults($.элемент управления datepicker.региональный ['en-GB']);