Проверка даты в таблице MVC Kendo дает ошибку?

jquery asp.net-mvc kendo-ui

202 просмотра

2 ответа

463 Репутация автора

Поле DateTime должно быть датой.

Я использую сетку кендо в проекте MVC. У меня есть и французская и английская версия одного и того же приложения. Вот что я делаю в файле _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 - это запись в файле ресурсов для хранения форматов средства выбора даты. У меня есть файлы ресурсов на английском и французском языках. Моя проблема в том, что я получаю это странное исключение: поле DateTime должно быть датой при редактировании записи во французской версии.

введите описание изображения здесь

Но это очень хорошо работает в английской версии ...

Автор: sony Источник Размещён: 18.07.2016 10:25

Ответы (2)


0 плюса

786 Репутация автора

Эти форматы даты ...

У меня была похожая проблема с форматами. Я могу предложить вам:

Получить экземпляр средства проверки кендо с конфигурацией:

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");

Я надеюсь, что это помогает.

Автор: mihkov Размещён: 19.07.2016 11:23

0 плюса

463 Репутация автора

Решение

Я нашел лучшее решение для этого:

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 дня, чтобы найти решение для этого ...

Автор: sony Размещён: 22.07.2016 03:59
Вопросы из категории :
32x32