Как исправить региональные настройки для jQuery datepicker, чтобы он работал в Firefox и IE7? - PullRequest
6 голосов
/ 19 марта 2012

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

Это код для выбора даты

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

Это мой параметр глобализации в Web.config

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

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

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

Ответы [ 2 ]

13 голосов
/ 19 марта 2012

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

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

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

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

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

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

Проверка на стороне клиента выполняется с помощью плагина 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;
        },
        ''
    );
}
3 голосов
/ 23 января 2013

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

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

просто запустите:

Install-Package jQuery.UI.i18n и добавить ссылку на скрипт в «Scripts / jquery-ui-i18n.js»

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

...