Kendo UI MVC Datepicker格式验证错误

时间:2016-01-29 11:42:39

标签: validation kendo-ui asp.net-mvc-5

我使用两种日期格式:

  1. MM.yyyy
  2. DD.MM.YYYY
  3. 我创建了编辑器模板来处理我所有不同的输入。

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

    我已经按照他们的建议添加了代码。这样做可以解决格式问题。但由于某种原因,我的TextBox字段的验证中断。虽然输入的数据是正确的,但会显示验证错误。该错误仅显示没有任何文本的小警告图标。

    有没有理由发生这种情况?

    模型中的字段:

    [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() })
         )
    }
    

1 个答案:

答案 0 :(得分:0)

所以在摆弄了一下之后,我想出了一个解决方案。

由于覆盖功能打破了其他所有内容,并且网站的文化是问题的根源,因此我创建了自己的自定义文化,并强制服务器和客户端使用该文化。

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

在我的_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>

我将此行添加到我的web.config:

<globalization uiCulture="en-ZA" culture="en-ZA" enableClientBasedCulture="true" ></globalization>

最后,我根据给出的示例添加了Kendo的默认验证器。

这解决了这个问题,并且作为额外的好处,对DateTime字段的绑定没有中断。 (我看到2016年2月1日(dd.MM.yyyy)的约会时间为2016年1月2日)

不幸的是,我仍然不知道为什么会发生这个错误,但这似乎解决了它。