如何修复jQuery datepicker的区域设置,以便在Firefox和IE7中运行?

时间:2012-03-19 16:14:42

标签: asp.net-mvc jquery-ui validation datetime datepicker

我正在使用jQuery的datepicker和asp.net MVC4。 datepicker适用于Firefox,但在IE7中我通过asp.net的验证得到消息,该字段不是日期。

这是datepicker的代码

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

这是我在Web.config中的全球化设置

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

E.g。在Firefox中,日期显示为“19/03/2012”字符串,并由asp.net的验证设置(客户端和服务器端)接受。在IE7中,客户端不接受相同的日期字符串。如果我将其更改为“03/19/2012”,则客户端接受日期,但服务器会抛出异常 - “InvalidOperationException。可以为空的对象必须具有值。”

我的viewModel使用一个可以为空的DateTime,我将其转换为控制器后期操作中的非空值DateTime。这适用于Firefox,但在IE7中,viewModel中日期的值为null。有什么问题?

2 个答案:

答案 0 :(得分:13)

以下行没有任何作用:

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

如果您不包含ASP.NET MVC 4模板中默认不包含的corresponding language file

您可以尝试明确设置格式:

$.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;
        },
        ''
    );
}

答案 1 :(得分:3)

Jquery本地化文件位于:

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

只需运行:

安装包jQuery.UI.i18n 并添加脚本引用“Scripts / jquery-ui-i18n.js”

从包管理器控制台,然后这将工作: 。($ datepicker.regional [ '烯GB'])的 $ datepicker.setDefaults;