Kendo Scheduler не обновляется при смене месяцев

Я пытаюсь реализовать Scehduler из Kendo UI в ASP.Net MVC (Razor).

Хотя планировщик не находит никаких данных для текущего представления месяца, и я меняю месяц, планировщик вызывает сервер, чтобы получить данные за новый месяц. Если сервер возвращает какое-либо событие, планировщик никогда не вызывает сервер снова, даже если я изменил месяц в планировщике с помощью кнопки < >.

Я поместил отладчик в getAdditionalData (javascript) и Lister (Controller), и оба никогда больше не вызывались.

Кто-нибудь знает, что я сделал не так?

Вот код, который мы используем:

Razor:

Html.Kendo().Scheduler<CalendrierEventViewModel>()
    .Name("schedulerCalendrier")
    .DataSource(ds =>
    {
        ds.Model(model => model.Id(x => x.Id));
        ds.Read(read => read.Action("Lister", "Calendrier").Data("getAdditionalData"));
    })
    .Resources(resources =>
    {
        resources.Add(m => m.ColorId)
            .DataValueField("Value")
            .DataColorField("Color")
            .BindTo(new[]
            {
                new { Value = STDConsts.TraitementSuccesColorId,    Color = "#009106" }, // Vert
                new { Value = STDConsts.TraitementErreurColorId,    Color = "#ff2909" }, // Rouge
                new { Value = STDConsts.NouveauTraitementColorId,   Color = "#59006b" }, // Mauve
                new { Value = STDConsts.NouveauEssaiColorId,        Color = "#c9be00" }, // Jaune
                new { Value = STDConsts.NouveauDepotInterneColorId, Color = "#0006a4" }, // Bleu poudre
                new { Value = STDConsts.NouveauDepotExterneColorId, Color = "#BBDEFB" }, // Bleu marin
                new { Value = STDConsts.DonneeConvertieColorId,     Color = "#0500ef" }, // Bleu
            });
    })
    .EventTemplateId("event-template")
    .Views(views =>
    {
        views.MonthView(montView => montView.Selected(true));
    })
    .Editable(false)

Javascript:

<script>
   var vehiculeMultiSelect;

    function getAdditionalData() {
        var scheduler = $("#schedulerCalendrier").data("kendoScheduler");
        var vehiculeIds = [];

        if (vehiculeMultiSelect === undefined) {
            $("#vehiculeList option:selected").each(function (index, element) {
                vehiculeIds.push($(this).val());
            });
        } else {
            vehiculeIds = vehiculeMultiSelect.getIds();
        }

        var result = {
            start: scheduler.view().startDate().toISOString(),
            end: scheduler.view().endDate().toISOString(),
            vehiculeIds: vehiculeMultiSelect !== undefined ? vehiculeMultiSelect.getIds() : vehiculeIds
        }

        return result;
    }
</script>

Шаблон события

<script id="event-template" type="text/x-kendo-template">
    <div title="#= title #">
        <div class="k-event-template">
            <a class="calendar-event" href="@Url.Action("Index", "Historique", new { Area = "Suivi" })?Date=#= kendo.toString(start, 'yyyy-MM-dd') #">
                #= title #
            </a>
        </div>
    </div>
</script>

контроллер:

    [HttpGet]
    public ActionResult Index()
    {
        Collection<VehiculeViewModel> vehicules = _calendrierImpl.GetVehiculesForCurrentUser();
        CalendrierViewModel model = new CalendrierViewModel { Vehicules = vehicules.OrderBy(x => x.Nom) };
        return View(model);
    }

    public ActionResult Lister([DataSourceRequest]DataSourceRequest request, DateTime start, DateTime end, int[] vehiculeIds)
    {
        TempData[STDConsts.VehiculeIdsKey] = vehiculeIds;
        Collection<CalendrierEventViewModel> list = _calendrierImpl.GetListCalendrier(start, end, vehiculeIds);
        return Json(list.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
    }

1 ответ

Я нашел решение в демонстрационном проекте GitHub!

    .DataSource(ds =>
    {
        ds.Model(model => model.Id(x => x.Id));
        ds.Read(read => read.Action("Lister", "Calendrier").Data("getAdditionalData"));
        ds.ServerOperation(true);
    })

Мне нужно было добавить в мой источник данных ds.ServerOperation(true); С этой строкой кода сервер всегда вызывается, даже если мы получаем какие-либо данные за предыдущий месяц.

Другие вопросы по тегам