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