asp.net-mvc - 如何修复jQuery datepicker的区域设置,使其可在Firefox和IE7中使用?

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

我正在使用jQuery的datepicker和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中,客户端不接受相同的日期字符串。如果我将其更改为“03/19/2012”,则客户端会接受日期,但是服务器会引发异常-“InvalidOperationException。可为空的对象必须具有值。”

我的viewModel使用一个可空的DateTime,我在 Controller 的post操作中将其强制转换为一个不可空的DateTime。这在Firefox中有效,但在IE7中,viewModel中的日期值为null。问题是什么?

最佳答案

以下行不执行任何操作:

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

如果您不包括corresponding language file(默认情况下不包括在ASP.NET MVC 4模板中)。

您可以尝试明确设置格式:
$.datepicker.setDefaults({ dateFormat: 'dd/mm/yy' });

但这仅涉及在日期选择器中选择日期后应如何格式化日期。它与验证无关。

客户端验证由jquery.validate插件执行,该插件依次使用浏览器当前配置的区域性(这可以解释您在FF和IE之间观察到的差异,例如,其中一个可能配置为使用en-GB,而另一个配置为使用en-GB美国)或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;
        },
        ''
    );
}

关于asp.net-mvc - 如何修复jQuery datepicker的区域设置,使其可在Firefox和IE7中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773746/

相关文章:

javascript - jquery 返回按钮到可排序图库中的上一个类别

javascript - jquery form.submit() 触发处理程序,但不是实际的提交

c# - 是否可以从默认表 AspNetUsers 中删除行?如果是,请解释一下

使用 FileStreamResult 作为返回值的 jQuery post

asp.net-mvc - ASP.NET MVC4 HtmlHelper 输出额外不需要的标记

javascript - JavaScriptSerializer 期间 ASP.NET MVC AngularJS 中的 MaxJsonLength 异常

javascript - 游标类型 : move ONLY when drag

javascript - jQuery UI - 检测元素是否被拖动

java - 接收参数的 CDI 验证

validation - 只允许在网站上注册 'business' 电子邮件地址