日期的多文化不显眼验证

Multi-Culture Unobtrusive Validation Of Dates

本文关键字:不显眼 验证 文化 日期      更新时间:2023-09-26

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

默认情况下,即使输入了有效的日期,也会导致验证失败,说明date字段必须是有效的日期。

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

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

然而,这似乎不再是有效的-我得到一个"全球化。文化不是一个函数"错误"。但是,如果我删除了这一行,我就不会在任何字段上得到任何验证。

看来你需要下载jquery。globalize来使用这些代码,但是这些代码现在已经从Github中拉出来并合并到新版本的JQuery中(由于与其他库冲突,我无法使用)。

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

是否有一种更简单的方法来执行日期验证,它将适用于任何文化?或者有一个链接到全球化的旧版本,可以像建议的那样工作?

这里有几个类似的问题:HTML5更改日期时间格式

jquery UI datepicker和MVC视图模型类型datetime

答案似乎暗示了三种方法:

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

2)添加以下脚本(用于日期选择器控制):

$.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转换为字符串,因为它是只读的。