I am using Telerik UI Scheduler for asp.net core Project.I am using WebApi to bind data and insert new meeting to the room but I have 2 problems are:
1. insert is called twice when I insert new Item.
2. update and delete methods are bound to Post and they are not calling corresponded do delete of add operation.
html view
@(Html.Kendo().Scheduler<
Meeting
>().Name("scheduler").Date(new DateTime(2017, 5, 13))
.StartTime(new DateTime(2017, 5,13, 7, 00, 00))
.Editable(true)
.Views(views=>{
views.DayView();
views.AgendaView();
})
.Height(600)
.Timezone("Etc/UTC")
.Group(group => { group.Resources("Rooms"); group.Date(true); })
.Resources(resource =>
{
resource.Add(m => m.RoomId).Title("Room").Name("Rooms").DataTextField("Text").DataValueField("Value").DataColorField("Color").BindTo(new[] {
new { Text = "Meeting Room 101", Value = 1, Color = "#6eb3fa" },
new { Text = "Meeting Room 201", Value = 2, Color = "#f58a8a" }
});
resource.Add(m => m.Attendees)
.Title("Attendees")
.Multiple(true)
.DataTextField("Text")
.DataValueField("Value")
.DataColorField("Color")
.BindTo(new[] {
new { Text = "Alex", Value = 1, Color = "#f8a398" } ,
new { Text = "Bob", Value = 2, Color = "#51a0ed" } ,
new { Text = "Charlie", Value = 3, Color = "#56ca85" }
});
}).DataSource(d => d
.WebApi()
.Model(m =>
{
m.Id(f => f.RecordId);
m.Field(f => f.Title).DefaultValue("No title");
m.Field(f => f.Title).DefaultValue("No title");
})
.Events(events => events.Error("error_handler"))
.Read(read => read.Action("Get", "Meeting"))
.Create(create => create.Action("Post", "Meeting"))
.Update(update => update.Action("Put", "Meeting", new { id = "{0}" }))
.Destroy(destroy => destroy.Action("Delete", "Meeting", new { id = "{0}" }))
).Deferred())
@* All initialization scripts are rendered to the bottom of the page, see _Layout.cshtml *@
@section scripts {
@Html.Kendo().DeferredScripts()
}
<
script
>
function error_handler(e) {
var errors = $.parseJSON(e.xhr.responseText);
if (errors) {
alert("Errors:\n" + errors.join("\n"));
}
}
</
script
>
meeting Web api controller
[Route("api/[controller]")]
public class MeetingController : Controller
{
private IMeetingData meetingData;
public MeetingController(IMeetingData meetingData)
{
this.meetingData = meetingData;
}
// GET api/task
[HttpGet]
public DataSourceResult Get([DataSourceRequest]DataSourceRequest request)
{
return meetingData.GetAll().ToDataSourceResult(request);
}
// POST api/Meeting
[HttpPost]
public IActionResult Post(Meeting m)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState.Values.SelectMany(v => v.Errors).Select(error => error.ErrorMessage));
}
meetingData.Insert(m, null);
return new ObjectResult(new DataSourceResult { Data = new[] { m }, Total = 1 });
}
// PUT api/Meeting/5
[HttpPut("{id}")]
public IActionResult Put(int id, Meeting m)
{
if (ModelState.IsValid && id == m.RecordId)
{
try
{
meetingData.Update(m, null);
}
catch (Exception)
{
return new NotFoundResult();
}
return new StatusCodeResult(200);
}
else
{
return BadRequest(ModelState.Values.SelectMany(v => v.Errors).Select(error => error.ErrorMessage));
}
}
// DELETE api/Meeting/5
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
try
{
meetingData.Delete(new Meeting { RecordId = id }, null);
}
catch (Exception)
{
return new NotFoundResult();
}
return new StatusCodeResult(200);
}
}
}