【问题标题】:Kendo DatePicker Format validation and error messageKendo DatePicker 格式验证和错误消息
【发布时间】:2013-10-10 09:49:26
【问题描述】:

我正在创建一个页面,该页面具有 dd/MM/yyyy 格式的 Datepicker 和文化 ar-SA,但是当我尝试设置日期时,它总是返回无效日期 这是日期选择器

@Html.Kendo().DatePickerFor(model => model.ValidStartDate).HtmlAttributes(new { id = "ValidStartDate_" + Model.ItemCode }).Culture("ar-SA").Format("dd/MM/yyyy").ParseFormats(new string[] {"dd/MM/yyyy"})

另一个问题是验证消息它总是返回默认消息而不是我在视图模型中设置的自定义消息

[Date( ErrorMessageResourceType = typeof(Global), ErrorMessageResourceName = "ValidStartDate_InvalidDate")]
        public Nullable<System.DateTime> ValidStartDateH { get; set; }

【问题讨论】:

  • 是服务端验证失败还是客户端验证失败?
  • 客户端验证失败
  • 酷,你试过不同的浏览器吗?您使用的是 Kendo 的 Validator 还是 JQuery Unobtrusive?甚至可能是别的什么?
  • 我已经尝试过 IE 和 chrome,结果相同,并且我使用了 kendo 验证器

标签: asp.net-mvc-4 datepicker kendo-ui


【解决方案1】:

型号:

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
[Required(ErrorMessage = "Pick a date from Kendo Date Picker")]
public DateTime mydate{ get; set; }

查看:

@(Html.Kendo().DatePickerFor(m=>m.mydate)
              .Name("MyDate")
              .Format("dd/MM/yyyy")
              .ParseFormats(new string[] {"dd/MM/yyyy"})

添加脚本document.ready函数

 $(document).ready(function () {
        kendo.culture("en-GB");

        $.validator.methods['date'] = function (value, element) {
            var check = false;
            var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
            if (re.test(value)) {

                var adata = value.split('/');
                var dd = parseInt(adata[0], 10);

                var mm = parseInt(adata[1], 10);
                var yyyy = parseInt(adata[2], 10);
                var xdata = new Date(yyyy, (mm - 1), dd);

                if ((xdata.getFullYear() == yyyy) && (xdata.getMonth() == (mm - 1)) && 
                    (xdata.getDate() == dd)) {

                    check = true;
                }
                else {
                    alert(value);
                    check = false;
                }

            } else
                check = false;
            return this.optional(element) || check;
        }

    });

【讨论】:

  • 欢迎来到*。参加this 之旅,了解该网站的运作方式及其用途。学习格式化你的答案,因为它会增加可读性。
【解决方案2】:

我通过在加载脚本中设置文化来解决日期格式错误消息

kendo.culture("ar-SA"); 

但我还有第二个问题,即自定义文本消息仍未从数据注释消息中返回

【讨论】:

    【解决方案3】:

    删除 [Date(ErrorMessageResourceType = typeof(Global), ErrorMessageResourceName = "ValidStartDate_InvalidDate")] 并使用这个正则表达式。

    [数据类型(数据类型。日期)] [正则表达式(@"^(((0[1-9]|[12]\d|3[01])/(0[13578]|1[02])/((19|[2-9])) d)\d{2}))|((0[1-9]|[12]\d|30)/(0[13456789]|1[012])/((19|[2-9]\ d)\d{2}))|((0[1-9]|1\d|2[0-8])/02/((19|[2-9]\d)\d{2} ))|(29/02/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16| [2468][048]|[3579][26])00))))$",ErrorMessageResourceType = typeof(Object),ErrorMessageResourceName = "ValidStartDate_InvalidDate")

    公共日期时间?释放日期 { 得到;放; }

    【讨论】:

    • 谢谢你的帮助,我去试试