2017-07-27 8 views
0

私は剣道UIのScehdulerをASP.Net MVC(Razor)に実装しようとしています。月を変更すると剣道スケジューラが更新されない

スケジューラは、現在の月表示とi変更月のデータを見つけられませんが、スケジューラは新しい月のデータを取得するためにサーバーを呼び出しています。 サーバがイベントを返す場合、スケジューラの月を自分の<>ボタンで変更しても、スケジューラはサーバを再度呼び出すことはありません。

私はデバッガを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

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)を追加する必要がありました。 このコード行では、先月のデータを取得してもサーバーが常に呼び出されます。

関連する問題