MVC Kendo网格日期验证给出错误?

时间:2016-07-18 22:25:07

标签: jquery asp.net-mvc kendo-ui

  

字段DateTime必须是日期。

我在MVC项目中使用Kendo网格。我有相同应用程序的法语和英语版本。以下是我在_Layout.cshtml文件中的操作:

<script>
    if ("@Session["Culture"]" === "en-CA") {
        kendo.culture("en-US");
        Globalize.culture('en-CA');
    } else {
        kendo.culture("fr-CA");
        Globalize.culture('fr-CA');
    }

    $.validator.methods.number = function (value, element) {
        return this.optional(element) || !isNaN(Globalize.parseFloat(value));
    }

    $.validator.methods.date = function (value, element) {          
        if (this.optional(element))
            return true;

        var result = Globalize.parseDate(value, "@LCL.Common_Formats.DatePickerFormat", "@Session["Culture"]");

        return !isNaN(result) && (result != null);
    }


    $.validator.methods.min = function (value, element, param) {
        return this.optional(element) || Globalize.parseFloat(value) >= param;
    }

    $.validator.methods.max = function (value, element, param) {
        return this.optional(element) || Globalize.parseFloat(value) <= param;
    }

    $.validator.methods.range = function (value, element, param) {
        if (this.optional(element))
            return true;
        var result = Globalize.parseFloat(value);
        return (result >= param[0] && result <= param[1]);
    }
</script>

在网格中我有一个日期选择器,如下所示:

 c.Bound(u => u.DateTime)
                    .Title(LCL.Common_Labels.PurchaseDate)
                    .Format("{0:" + LCL.Common_Formats.DatePickerFormat + "}")                    
                    .Width(smlColumn);

LCL.Common_Formats.DatePickerFormat是Resources文件中用于存储datepicker格式的条目。我有英文和法文资源文件。我的问题是,我得到了这个奇怪的例外: 字段DateTime必须是日期 在法语版本中编辑记录时。

enter image description here

但它在英文版中效果很好......

2 个答案:

答案 0 :(得分:0)

那些日期格式......

我的格式有类似的问题。我可以建议你:

使用配置获取kendo验证器的实例:

var kendoValudator = $('#yourFormId').kendoValidator({
    rules: {
        mvcdate: function (e) {
            if (e.is('[data-role="datepicker"]')) {
                var result = kendo.parseDate($(e).val(), 'dd/MM/yyyy');
                return !!result;
            }

            return true;
     }
}).data('kendoValidator');

此外,如果您在页面上使用jQuery,请尝试添加:

jQuery.extend(jQuery.validator.methods, {
    date: function (value, element) {
        if ($(element).is('[data-role="datepicker"]')) {
            var res = this.optional(element) || kendo.parseDate(value, "dd/MM/yyyy") != null;
            return !!res;
        }

        return true;
    }
});

然后,如果您的服务器收到默认日期(01/01/0001),您应该更改服务器文化。

示例:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");

我希望它有所帮助。

答案 1 :(得分:0)

我找到了最佳解决方案:

var culture = kendo.culture();
if (culture.name === "fr-CA")
{
    culture.calendar.patterns.F = "dd/MM/yyyy";
}
else
{
    culture.calendar.patterns.F = "MM/dd/yyyy";
}

必须在document.ready()部分添加。

我花了3天时间找到解决方案......