Skip to content

Commit 4d98b44

Browse files
committed
fix: Scheduler custom editor example concurency problem on delete
1 parent 48d0c68 commit 4d98b44

File tree

2 files changed

+40
-9
lines changed

2 files changed

+40
-9
lines changed

scheduler/scheduler-custom-editor/SchedulerCustomEditor/Controllers/HomeController.cs

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
using Kendo.Mvc.Extensions;
44
using Kendo.Mvc.UI;
55
using SchedulerCustomEditor.Models;
6+
using System.Collections.Generic;
7+
using System.Linq;
68
using System.Web.Mvc;
79

810
public class HomeController : Controller
@@ -32,34 +34,62 @@ public virtual JsonResult Meetings_Read([DataSourceRequest] DataSourceRequest re
3234
return Json(meetingService.GetAll().ToDataSourceResult(request));
3335
}
3436

35-
public virtual JsonResult Meetings_Destroy([DataSourceRequest] DataSourceRequest request, MeetingViewModel meeting)
37+
public virtual JsonResult Meetings_Destroy([DataSourceRequest] DataSourceRequest request, IEnumerable<MeetingViewModel> models)
3638
{
3739
if (ModelState.IsValid)
3840
{
39-
meetingService.Delete(meeting, ModelState);
41+
var list = models.ToList();
42+
43+
for (int i = 0; i < list.Count; i++)
44+
{
45+
var meeting = list[i];
46+
47+
if (meeting.RecurrenceID != null)
48+
{
49+
for (int j = 0; j < list.Count; j++)
50+
{
51+
var potentialParent = list[j];
52+
53+
if (meeting.RecurrenceID == potentialParent.MeetingID) {
54+
models = models.Where(m => m.MeetingID != potentialParent.MeetingID);
55+
}
56+
}
57+
}
58+
}
59+
60+
foreach (var meeting in models)
61+
{
62+
meetingService.Delete(meeting, ModelState);
63+
}
4064
}
4165

42-
return Json(new[] { meeting }.ToDataSourceResult(request, ModelState));
66+
return Json(models.ToDataSourceResult(request, ModelState));
4367
}
4468

45-
public virtual JsonResult Meetings_Create([DataSourceRequest] DataSourceRequest request, MeetingViewModel meeting)
69+
public virtual JsonResult Meetings_Create([DataSourceRequest] DataSourceRequest request, IEnumerable<MeetingViewModel> models)
4670
{
4771
if (ModelState.IsValid)
4872
{
49-
meetingService.Insert(meeting, ModelState);
73+
foreach (var meeting in models)
74+
{
75+
meetingService.Insert(meeting, ModelState);
76+
}
5077
}
5178

52-
return Json(new[] { meeting }.ToDataSourceResult(request, ModelState));
79+
return Json(models.ToDataSourceResult(request, ModelState));
5380
}
5481

55-
public virtual JsonResult Meetings_Update([DataSourceRequest] DataSourceRequest request, MeetingViewModel meeting)
82+
public virtual JsonResult Meetings_Update([DataSourceRequest] DataSourceRequest request, IEnumerable<MeetingViewModel> models)
5683
{
5784
if (ModelState.IsValid)
5885
{
59-
meetingService.Update(meeting, ModelState);
86+
foreach (var meeting in models)
87+
{
88+
meetingService.Update(meeting, ModelState);
89+
}
6090
}
6191

62-
return Json(new[] { meeting }.ToDataSourceResult(request, ModelState));
92+
return Json(models.ToDataSourceResult(request, ModelState));
6393
}
6494
}
6595
}

scheduler/scheduler-custom-editor/SchedulerCustomEditor/Views/Home/Index.cshtml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
});
3737
})
3838
.DataSource(d => d
39+
.Batch(true)
3940
.Model(m => {
4041
m.Id(f => f.MeetingID);
4142
m.Field(f => f.Title).DefaultValue("No title");

0 commit comments

Comments
 (0)