Validation Kendo UI MVC日期选择器格式验证错误

Validation Kendo UI MVC日期选择器格式验证错误,validation,kendo-ui,asp.net-mvc-5,Validation,Kendo Ui,Asp.net Mvc 5,我使用两种类型的日期格式: 年月日 年月日 我创建了编辑器模板来处理所有不同的输入 我知道剑道在使用不在所选文化中的日期格式时有一些缺点。因此,我总是会得到一个验证错误“字段MEAS DATE必须是日期” 我已经按照他们的建议添加了代码。这确实解决了格式问题。但现在由于某种原因,对我的文本框字段的验证中断了。尽管输入的数据正确,但仍显示验证错误。错误仅显示小警告图标,没有任何文本 发生这种情况有什么原因吗 模型中的字段: [DisplayName("CONTRACT")] [Required(E

我使用两种类型的日期格式:

  • 年月日
  • 年月日
  • 我创建了编辑器模板来处理所有不同的输入

    我知道剑道在使用不在所选文化中的日期格式时有一些缺点。因此,我总是会得到一个验证错误“字段MEAS DATE必须是日期”

    我已经按照他们的建议添加了代码。这确实解决了格式问题。但现在由于某种原因,对我的文本框字段的验证中断了。尽管输入的数据正确,但仍显示验证错误。错误仅显示小警告图标,没有任何文本

    发生这种情况有什么原因吗

    模型中的字段:

    [DisplayName("CONTRACT")]
    [Required(ErrorMessage="{0} IS REQUIRED")
    [UIHint("TextInput")]
    [AdditionalMetadata("Class", "green-field")]
    [AdditionalMetadata("MaxLength", "10")]
    public string ContractNo { get; set; }
    
    [DisplayName("MEAS DATE")]
    [UIHint("DateInput")]
    [AdditionalMetadata("Class", "green-field")]
    [AdditionalMetadata("Format", "dd.MM.yyyy")]
    public DateTime MeasurementDate { get; set; }
    
    DateTime的编辑器模板:

    @model DateTime?
    @{
       var values = ViewData.ModelMetadata.AdditionalValues;
       var name = ViewData.ModelMetadata.PropertyName;
     }
    
    @if (values["Class"].ToString().Equals("blue-field"))
    {
       @(Html.Kendo().DatePickerFor(m => m)
        .Format(values["Format"].ToString())
        .HtmlAttributes(new { @class = values["Class"] })
        .Enable(false)
        .Value(Model)
         )
    }
    else
    {
      @(Html.Kendo().DatePickerFor(m => m)
        .Format(values["Format"].ToString())
        .HtmlAttributes(new { @class = values["Class"] + " date" })
        .Value(Model)
        )
    }
    
    字符串编辑器模板:

    @model string
    
    @{ 
       var values = ViewData.ModelMetadata.AdditionalValues;
       var name = ViewData.ModelMetadata.PropertyName;
     }
    
    @if (values["Class"].ToString().Equals("blue-field"))
    {
        @(Html.Kendo().TextBoxFor(m => m)
         .HtmlAttributes(new { @class = values["Class"].ToString() + " helper",   @maxlength = values["MaxLength"].ToString() })
         .Enable(false)
         .Value(Model)
        )
    }
    else
    {
        @(Html.Kendo().TextBoxFor(m => m)
           .HtmlAttributes(new { @class = values["Class"].ToString() + " helper", @maxlength = values["MaxLength"].ToString() })
         )
    }
    

    所以,经过一番折腾之后,我想出了一个解决办法

    由于覆盖功能破坏了所有其他功能,并且站点的区域性是问题的根源,因此我创建了自己的自定义区域性,并强制服务器和客户端使用该区域性

    我使用了剑道提供的en-ZA文化,并根据我的要求编辑了日期格式

    在my_Layout.cshtml中,我添加了以下内容:

    <script>
      $(document).ready(function () {
        kendo.culture("en-ZA");           //culture of your choice
        $.validator.addMethod('date',
           function (value, element) {
               return this.optional(element) || kendo.parseDate(value)
           });
      });
    </script>
    
    
    $(文档).ready(函数(){
    剑道文化(“ENZA”)//你选择的文化
    $.validator.addMethod('date',
    函数(值、元素){
    返回此.optional(元素)| | kendo.parseDate(值)
    });
    });
    
    我已将此行添加到我的web.config:

    <globalization uiCulture="en-ZA" culture="en-ZA" enableClientBasedCulture="true" ></globalization>
    
    
    
    最后,我根据给出的示例添加了Kendo的默认验证器

    这解决了问题,并且作为一个额外的好处,对DateTime字段的绑定没有中断。(我看到像2016年2月1日(dd.MM.yyy)这样的日期是2016年1月2日)

    不幸的是,我仍然不知道为什么会出现这个错误,但这似乎已经解决了它