多文化不引人注意的日期验证

时间:2015-06-09 15:40:18

标签: javascript jquery asp.net validation

我有一个ASP.NET MVC项目,我使用jquery.validate.unobtrusive来执行值的客户端验证。但是,我在验证日期方面遇到了问题。该系统需要支持多种文化,但目前大多数用户来自英国,因此请使用英国日期格式。

默认情况下,即使输入了有效日期,也无法验证,说明日期字段必须是有效日期。

我在网上找到以下代码来更改日期格式:

$.culture = Globalize.culture("en-GB");
    $.validator.methods.date = function (value, element) {
        //This is not ideal but Chrome passes dates through in ISO1901 format regardless of locale 
        //and despite displaying in the specified format.

        return this.optional(element)
            || Globalize.parseDate(value, "@ViewBag.DateFormat", "en-GB")
            || Globalize.parseDate(value, "yyyy-mm-dd");
    };

然而,这似乎不再有效 - 我得到了一个" Globalize.culture不是一个功能"错误。但是,如果我删除该行,我在任何字段都没有得到任何验证。

您似乎需要下载jquery.globalize才能使用该代码,但是现在已经从Github中提取并合并到更新版本的JQuery中(由于与其他库的冲突,我无法使用)。

使用新的Globalize似乎也不起作用。

是否有更简单的方法来执行适用于任何文化的日期验证?或者是否有一个链接到旧版本的Globalize,它将按照建议工作?

1 个答案:

答案 0 :(得分:0)

以下是一些类似的问题: HTML5 change datetime format

jquery ui datepicker and mvc view model type datetime

答案似乎提出了3种方法:

1)使用jquery globalize覆盖不显眼的jquery

2)添加以下脚本(用于datepicker控件):

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

3)使用隐藏的输入。

不幸的是,在我的情况下,没有一个解决方案有效,我不得不将模型字段从datetime转换为字符串,因为它是readonly。