3

我的 MVC5 应用程序选择“dd/MM/yyyy”格式的日期会导致“字段 xxx 必须是日期”错误。另一方面,如果我在下面注释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) 
 )


实体或视图上是否有任何缺失或错误的定义?IE

[DataType(DataType.Date)]

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

4

3 回答 3

7

您可以尝试将此作为可能的解决方案:

1)如果您想将 de-DE 文化应用于整个站点,那么您可以添加:

<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" 
                              })
   )

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

于 2015-02-19T12:05:07.580 回答
2

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

如何使用剑道验证器验证日期格式为 yyyy-MM-dd?

于 2015-09-15T11:52:45.957 回答
2

使用 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);
于 2018-10-22T14:07:30.940 回答