3

我正在开发一个 ASP.NET MVC4 应用程序。

我的视图模型类属性

[DisplayName("Birth Date")]
        [Required(ErrorMessage = "You must indicate your full birthday")]
        [DataType(DataType.Date), DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
        public DateTime BirthDate { get; set; }

Javascript代码

var dt = new Date();
    $(function () {
        $("#BirthDate").datepicker({
            showOn: "button",
            buttonImage: "@Url.Content("~/Content/themes/base/images/calendar.gif")",
            buttonImageOnly: true,
            dateFormat: 'dd/mm/yy',
            changeMonth: true,
            changeYear: true,
            yearRange: '1980:dt'
        });
    });

查看代码

<div class="block">
                    @Html.LabelFor(model => model.BirthDate, new { @Class = "compel" })
                    @Html.TextBoxFor(model => model.BirthDate)
                </div>

当我在 IE 和 Mozilla Firefox 中运行该应用程序时,它工作正常,但使用 google chrome 时,它​​会给出验证错误,因为Value 24/12/2012 is invalid for Birth Date

请帮我解决这个问题。

4

4 回答 4

1

看起来 IE 和 Firefox 使用与 OS 相同的格式,而 Chrome 没有,这有时会导致日期验证出现问题。

也许这会解决您的问题:Chrome 中的非侵入式验证不会使用 dd/mm/yyyy 进行验证

于 2013-01-16T14:53:05.573 回答
1

为了解决我所做的问题:

  1. 添加对脚本 datepicker-fr.js 的引用(你可以在这里找到它https://github.com/jquery/jquery-ui/tree/master/ui/i18n)。
  2. 创建一个函数并将其添加到我的自定义 javascript 文件中:

     function extendJQueryDateValidation() {
    
    // fix date validation for chrome
    jQuery.extend(jQuery.validator.methods, {
        date: function (value, element) {
            var isChrome = window.chrome;
            // make correction for chrome
            if (isChrome) {
                var d = new Date();
                return this.optional(element) ||
                !/Invalid|NaN/.test($.datepicker.parseDate("dd/mm/yy", value));
            }
                // leave default behavior
            else {
                return this.optional(element) ||
                !/Invalid|NaN/.test(new Date(value));
            }
        }
    });
    }
    

    参考http://devdens.blogspot.com/2011/11/jquery-validation-fix-for-date-format_29.html

  3. 在我有日期输入元素的页面中:

            $(function () 
         {          
          extendJQueryDateValidation();        
          $.datepicker.setDefaults($.datepicker.regional   ["fr"]);    
                   $("#dateField").datepicker(
        { yearRange: "1980:2015", 
     dateFormat: "dd/mm/yy", 
     changeMonth: true, 
     changeYear: true });
    
               });
    
于 2015-07-29T15:52:46.483 回答
1

您可以试试这个日期格式:示例:'31/12/1999'

 jQuery.extend(jQuery.validator.methods, {
        date: function (value, element) {
            return /^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/.test(value);
        }
    });
于 2016-03-31T10:01:57.273 回答
0

我搜索了这个并在这里和其他地方发现了多个问题。我找到了一个简单的解决方案,也想与未来的搜索者分享;

https://stackoverflow.com/a/36903550/1997092

在调用您的验证文件后,我发现此错误的最简单更正方法是以下代码片段;

jQuery.validator.methods["date"] = function (value, element){
    var shortDateFormat = "dd/mm/yy";
    var res = true;
    try {
        $.datepicker.parseDate(shortDateFormat, value);
    } catch (error) {
        res = false;
    }
    return res;
}

即使在 2016 年发现的版本中,我仍然在 Chrome 而不是 Firefox 中没有上述代码的情况下遇到此问题。

这是我的首选解决方案,因为它不需要任何额外的库或插件即可工作。

我在这里搜索问题时发现了这个代码片段。

希望它可以帮助某人。

于 2016-04-28T01:20:23.007 回答