使用DatePicker时,kendoValidator()会导致“字段xxx必须是日期”错误

时间:2015-02-19 10:36:10

标签: asp.net-mvc kendo-ui datetimepicker kendo-asp.net-mvc kendo-validator

我的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) 
 )


实体或视图上是否有任何遗漏或错误的定义?即。

[DataType(DataType.Date)]

先谢谢你的帮助......

3 个答案:

答案 0 :(得分:4)

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

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

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

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

2)您可以尝试的下一件事是将您想要的日期格式添加到允许的日期格式&#34; parseFormats&#34;为了控制。

这可以这样做:

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

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

答案 1 :(得分:1)

通过添加自定义验证而不必修复文化来查看此Q&amp; A以获得解决方法。

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

答案 2 :(得分:0)

请尝试以下使用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);