更改月份时,Kendo Scheduler不会刷新

时间:2017-07-27 12:11:03

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

我正在尝试在ASP.Net MVC(Razor)中实现Kendo UI的Scehduler。

虽然调度程序找不到当前月视图的任何数据,并且我更改月份,但调度程序正在调用服务器以获取新月的数据。 如果服务器返回任何事件,则调度程序永远不会再次调用服务器,即使我在调度程序上使用< >按钮。

我把调试器放在getAdditionalData(javascript)和Lister(Controller)中,两者都不会再被调用。

任何人都知道我做错了什么?

以下是我们使用的代码:

剃刀:

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 个答案:

答案 0 :(得分:0)

我在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); 使用这行代码,即使我们获得前一个月的任何数据,服务器也会被调用。