kendoValidator() 在使用 DatePicker 时导致“The field xxx must be a date”错误

kendoValidator() causes “The field xxx must be a date” error when using DatePicker

我的 MVC5 应用程序选择 "dd/MM/yyyy" 格式的日期会导致 "The field xxx must be a date" 错误。另一方面,如果我评论 kendoValidator() 行如下错误已经消失,但在那种情况下我无法执行客户端验证,因此我想使用 kendoValidator。以下是与此控件相关的代码部分。

实体:

[Required(ErrorMessage = "Required field")]
[Display(Name = "Start Date")]
public DateTime StartDate { get; set; }


查看:

...    
<script src="~/Scripts/kendo/2014.3.1119/cultures/kendo.culture.de.min.js"></script>
<script src="~/Scripts/kendo/2014.3.1119/messages/kendo.messages.de-DE.min.js"></script>

<script>
    $(function () {
        $("form").kendoValidator(); //This line cause the error...
    });
</script>

@Html.LabelFor(m => m.StartDate )
    @(Html.Kendo().DatePickerFor(m => m.StartDate)
    .Animation(true)
    .Culture("de-DE")
    .Footer(false)
    .Format("dd/MM/yyyy")
    .Value(DateTime.Today) 
 )


Entity 或 View 的定义是否缺失或错误?即

[DataType(DataType.Date)]

在此先感谢您的帮助...

您可以试试这个作为可能的解决方案:

1)如果你想将去德文化应用到整个网站,那么你可以添加:

<script type="text/javascript">
    kendo.culture("de-DE");
</script>

将文化替换为您要应用的文化,并确保您已将适当的文化脚本添加到页面。

2) 接下来您可以尝试将您想要的日期格式添加到控件允许的日期格式 "parseFormats" 中。

可以这样做:

  @(Html.Kendo().DatePickerFor(m => m.StartDate)
                .Format("dd/MM/yyyy")
                .ParseFormats(new List<string>()               
                              {
                                "dd/MM/yyyy", 
                                "dd/MM/yy",
                                "dd MMM yyyy" 
                              })
   )

这些通常是我处理日期和验证的方式。

请参阅此问答,了解通过添加自定义验证而无需修复区域性来解决问题的方法。

How to validate a date is in the format yyyy-MM-dd using kendo validator?

试试下面的代码,jQuery 不显眼。

(function ($, kendo) {
            $.extend(true, kendo.ui.validator, {
                rules: {
                    mvcdate: function (input) {
                        if (input.is("[data-val-date]") && input.val() !== "") {
                            return kendo.parseDate(input.val()) !== null || kendo.parseDate(input.val(), "dd-MMM-yyyy") !== null || kendo.parseDate(input.val(), "dd-MM-yyyy") !== null  || kendo.parseDate(input.val(), "dd/MMM/yyyy") !== null;
                        }

                        return true;
                    }
                },
                messages: {
                    mvcdate: function (input) {
                        return input.attr("data-val-date");
                    }
                }
            });
        })(jQuery, kendo);