Дата в сентябре выбрана как ноль в JQuery DatePicker - PullRequest
0 голосов
/ 13 ноября 2018

Приложение находится в ASP.NET MVC 4, в котором в View есть TextBox, присоединенный к jQuery DatePicker, для выбора только комбо Месяц и Год.

Объявлен как:

@Html.TextBox("myDate", Model.myDate.HasValue ? Model.myDate.Value.ToString("MM/dd/yyyy") : string.Empty, new { @readonly = "readonly", maxlength = "12", style = "width: 75px;height:20px", id = "myDate" })

И значение выбирается как:

$(function () {
    $("#myDate").datepicker({
        changeMonth: true,
        changeYear: true,
        dateFormat: 'MM yy',
        minDate: 0,
        onClose: function () {
            var iMonth = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var iYear = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).datepicker('setDate', new Date(iYear, iMonth, 1));
        },

        beforeShow: function () {
            if ((selDate = $(this).val()).length > 0) {
                iYear = selDate.substring(selDate.length - 4, selDate.length);
                iMonth = jQuery.inArray(selDate.substring(0, selDate.length - 5),
                         $(this).datepicker('option', 'monthNames'));
                $(this).datepicker('option', 'defaultDate', new Date(iYear, iMonth, 1));
                $(this).datepicker('setDate', new Date(iYear, iMonth, 1));
            }
        }
    });
});

Значение в текстовом поле отправляется методу контроллера через ajax-вызов:

data: $("#myForm").serializeArray();

Здесь, когда форма массива проверяется перед отправкой, текст содержит значение «сентябрь 2019», «июль 2019» и т. Д.

В модели поле, т. Е. MyDate, определяется как тип данных DateTime? без других атрибутов.

Проблема заключается в том, что, когда я выбираю сентябрь 2019 года, базовая модель на стороне выделенного кода получает нулевое значение. Первоначально я думал, что это может быть из-за того, что сентябрь имеет 4 символа, но июнь 2019, июль 2019 работает нормально.

Я не уверен, почему только значения myDate, содержащие Sept, являются нулевыми, пока оно работает в течение других месяцев.

1 Ответ

0 голосов
/ 14 ноября 2018

Итак, наконец-то нашли ответ.Фреймворк .net каким-то образом не смог преобразовать сентябрь 2019 года в действительный DateTime, но хорошо работал при передаче сентября 2019 или сентября 2019 года. Чтобы противостоять этому, передал массив monthNames в качестве параметра для DatePicker, чтобы иметь только трехбуквенные названия месяцев как;

$(function () {
    $("#myDate").datepicker({
        changeMonth: true,
        changeYear: true,
        dateFormat: 'MM yy',
        minDate: 0,
        monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
        onClose: function () {
            var iMonth = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var iYear = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).datepicker('setDate', new Date(iYear, iMonth, 1));
        },

        beforeShow: function () {
            if ((selDate = $(this).val()).length > 0) {
                iYear = selDate.substring(selDate.length - 4, selDate.length);
                iMonth = jQuery.inArray(selDate.substring(0, selDate.length - 5),
                         $(this).datepicker('option', 'monthNames'));
                $(this).datepicker('option', 'defaultDate', new Date(iYear, iMonth, 1));
                $(this).datepicker('setDate', new Date(iYear, iMonth, 1));
            }
        }
    });
});

Это сработало, и теперь я могу получить действительный DatetIme на сентябрь 2019

...