Очень странное поведение событий для onChange в Telerik MVC DatePicker - PullRequest
1 голос
/ 10 июля 2011

Чтобы вопрос начался, мой код (я постараюсь включить только соответствующие части для начала), начиная с моего сценария:

function RaceDate_onChange() {
    var pickedDate = $(this).data('tDatePicker').value();
    var month = pickedDate.getMonth() + 1;
    $.get("/RaceCard/Details?year=" + pickedDate.getFullYear() + "&month=" + month + "&day=" + pickedDate.getDate());
}

Тогда моя разметка:

@Html.Telerik().DatePickerFor(model => model.RaceDate).ClientEvents(events => events.OnChange("RaceDate_onChange"))

И, наконец, немного о принимающем действии:

[HttpGet]
public ActionResult Details(int year, int month, int day)
{
    var viewModel = new RaceCardModel {Metadata = DetailModelMetadata.Display, RaceDate = new DateTime(year, month, day)};

Я пытаюсь получить выбор новой даты, чтобы вызвать GET, чтобы обновить страницу без отправки формы. Это прекрасно работает, за исключением этой проблемы:

В запросах GET к действию Details значение day всегда на один день от DatePicker. Например. Первое значение устанавливается из свойства модели представления, когда представление отображается, скажем, 3. Затем я нажимаю 14 и нажимаю на точку останова в методе действия. Значение day равно 3. Когда я нажимаю 29 и достигаю точки останова, значение day равно 14.

Помимо вопроса о том, что не так, я возьму на себя свободу и спрошу, есть ли лучший способ, который не является более сложным. Я довольно новичок и предпочел бы доставить рабочий код, который нуждается в пересмотре, чем увязнуть в касаниях и деталях.

Ответы [ 2 ]

2 голосов
/ 12 июля 2011

Попробуйте вместо этого использовать e.value, как показано в примере клиентских событий .Возможно, вы используете более старую версию, где метод value () возвращал предыдущее значение во время события OnChange.

UPDATE:

«e.value» означает поле значения аргументов OnChange:

function onChange(e) {
   var date = e.value; // instead of datePicker.value()
}
0 голосов
/ 10 июля 2011

Что касается разницы за 1 месяц, которую вы получаете, это нормально, и именно так работает метод getMonth() в javascript для экземпляра Date:

Значение, возвращаемое getMonth, представляет собой целое число от 0 до 11. 0 соответствует 1 января, 1 февраля и т. Д.

Таким образом, добавление +1 является правильным способом справиться с ситуацией,Точно так же, как и вы.

Небольшое замечание о вашем вызове AJAX: никогда не указывайте URL-адреса с жестким кодом.Всегда используйте помощников URL при работе с URL:

var year = pickedDate.getFullYear();
var month = pickedDate.getMonth() + 1;
var day = pickedDate.getDate();
var url = '@Url.Action("Details", "RaceCard")';
$.get(url, { year: year, month: month, day: day }, function(result) {
    // process the results of the AJAX call
});
...