Dear,
I am doing a booking system with Kendo UI Scheduler, once I delete one event, it always call the POST action instead of the DELETE action declared in my Odata API.
My Odata Controller is like that:
// POST: odata/BookingSchedulers
[ValidateHttpAntiForgeryToken]
public async Task<IHttpActionResult> Post(BookingScheduler bookingScheduler)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
bookingScheduler.Start = bookingScheduler.Start.ToLocalTime();
bookingScheduler.End = bookingScheduler.End.ToLocalTime();
_bookingSchedulerRepository.Create(bookingScheduler);
await _bookingSchedulerRepository.SaveAsync();
return Created(bookingScheduler);
}
// DELETE: odata/BookingSchedulers(5)
[ValidateHttpAntiForgeryToken]
public async Task<IHttpActionResult> Delete([FromODataUri] int key)
{
BookingScheduler bookingScheduler = await _bookingSchedulerRepository.FindAsync(key);
if (bookingScheduler == null)
{
return NotFound();
}
_bookingSchedulerRepository.Delete(bookingScheduler);
await _bookingSchedulerRepository.SaveAsync();
return StatusCode(HttpStatusCode.NoContent);
}
My POCO is
public class BookingScheduler
{
public int BookingSchedulerID { get; set; }
public int BookingItemID { get; set; }
public int ItemBreakdownID { get; set; }
public string BookingUser { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public int StaffID { get; set; }
public int RoomID { get; set; }
public string Description { get; set; }
public string StartTimezone { get; set; }
public string EndTimezone { get; set; }
public string RecurrenceID { get; set; }
public string RecurrenceRule { get; set; }
public string RecurrenceException { get; set; }
public bool IsAllDay { get; set; }
public virtual BookingItem BookingItem { get; set; }
public virtual Room Room { get; set; }
public virtual Staff Staff { get; set; }
public virtual ItemBreakdown ItemBreakdown { get; set; }
}
and My scheduler datasource is:
bookingDataSource: new kendo.data.SchedulerDataSource({
//batch: true,
type: "odata",
transport: {
read: {
url: config.bookingSchedulersUrl + '?$expand=ItemBreakdown',
dataType: "json"
},
update: {
url: function (data) {
return config.bookingSchedulersUrl + "(" + data.BookingSchedulerID + ")";
},
dataType: "json",
type: "PUT",
beforeSend: function (req) {
req.setRequestHeader('RequestVerificationToken', token);
}
},
create: {
url: config.bookingSchedulersUrl,
dataType: "json",
type: "POST",
beforeSend: function (req) {
req.setRequestHeader('RequestVerificationToken', token);
}
},
destroy: {
url: function (data) {
alert(data.BookingSchedulerID);
return config.bookingSchedulersUrl + "(" + data.BookingSchedulerID + ")";
},
dataType: "json",
type: "DELETE",
beforeSend: function (req) {
req.setRequestHeader('RequestVerificationToken', token);
}
}
},
error: function (e) {
alert(e.xhr.responseText);
},
requestEnd: function(e){
//if (e.type == "update") {
// openMessageWindow("#popup-message-template", messageViewModel("Edited Successfully.", "MESSAGE", false));
// var scheduler = $("#scheduler").data("kendoScheduler");
// scheduler.view(scheduler.view().name);
//}
//if (e.type == "create") {
// openMessageWindow("#popup-message-template", messageViewModel("Created Successfully.", "MESSAGE", false));
// var scheduler = $("#scheduler").data("kendoScheduler");
// scheduler.view(scheduler.view().name);
//}
if (e.type == "destory") {
openMessageWindow("#popup-message-template", messageViewModel("Deleted Successfully.", "MESSAGE", false));
var scheduler = $("#scheduler").data("kendoScheduler");
scheduler.view(scheduler.view().name);
}
},
schema: {
data: function (data) {
return data.value;
},
total: function (data) {
return parseInt(data["odata.count"]);
},
model: {
id: "bookingSchedulerID",
fields: {
bookingSchedulerID: { from: "BookingSchedulerID", type: "number" },
bookingItemID: { from: "BookingItemID", type: "number", defaultValue: data.BookingItemID },
itemBreakdownID: { from: "ItemBreakdownID", type: "number", nullable: true },
title: { from: "BookingUser", defaultValue: userName },
start: { type: "date", from: "Start" },
end: { type: "date", from: "End" },
roomId: { from: "RoomID", type: "number", nullable: true },
staffId: { from: "StaffID", type: "number", nullable: true },
startTimezone: { from: "StartTimezone" },
endTimezone: { from: "EndTimezone" },
description: { from: "Description" },
recurrenceId: { from: "RecurrenceID" },
recurrenceRule: { from: "RecurrenceRule" },
recurrenceException: { from: "RecurrenceException" },
isAllDay: { type: "boolean", from: "IsAllDay" },
image: { from: "ItemBreakdown.ItemBreakdownImageURL" },
itemBreakdownName: { from: "ItemBreakdown.ItemBreakdownName" },
color: { from: "ItemBreakdown.Color" }
}
}
},
serverFiltering: true,
filter: {
field: "BookingItemID",
operator: "eq",
value: data.BookingItemID
}
}),
Any one can help, Thanks.
I am doing a booking system with Kendo UI Scheduler, once I delete one event, it always call the POST action instead of the DELETE action declared in my Odata API.
My Odata Controller is like that:
// POST: odata/BookingSchedulers
[ValidateHttpAntiForgeryToken]
public async Task<IHttpActionResult> Post(BookingScheduler bookingScheduler)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
bookingScheduler.Start = bookingScheduler.Start.ToLocalTime();
bookingScheduler.End = bookingScheduler.End.ToLocalTime();
_bookingSchedulerRepository.Create(bookingScheduler);
await _bookingSchedulerRepository.SaveAsync();
return Created(bookingScheduler);
}
// DELETE: odata/BookingSchedulers(5)
[ValidateHttpAntiForgeryToken]
public async Task<IHttpActionResult> Delete([FromODataUri] int key)
{
BookingScheduler bookingScheduler = await _bookingSchedulerRepository.FindAsync(key);
if (bookingScheduler == null)
{
return NotFound();
}
_bookingSchedulerRepository.Delete(bookingScheduler);
await _bookingSchedulerRepository.SaveAsync();
return StatusCode(HttpStatusCode.NoContent);
}
My POCO is
public class BookingScheduler
{
public int BookingSchedulerID { get; set; }
public int BookingItemID { get; set; }
public int ItemBreakdownID { get; set; }
public string BookingUser { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public int StaffID { get; set; }
public int RoomID { get; set; }
public string Description { get; set; }
public string StartTimezone { get; set; }
public string EndTimezone { get; set; }
public string RecurrenceID { get; set; }
public string RecurrenceRule { get; set; }
public string RecurrenceException { get; set; }
public bool IsAllDay { get; set; }
public virtual BookingItem BookingItem { get; set; }
public virtual Room Room { get; set; }
public virtual Staff Staff { get; set; }
public virtual ItemBreakdown ItemBreakdown { get; set; }
}
and My scheduler datasource is:
bookingDataSource: new kendo.data.SchedulerDataSource({
//batch: true,
type: "odata",
transport: {
read: {
url: config.bookingSchedulersUrl + '?$expand=ItemBreakdown',
dataType: "json"
},
update: {
url: function (data) {
return config.bookingSchedulersUrl + "(" + data.BookingSchedulerID + ")";
},
dataType: "json",
type: "PUT",
beforeSend: function (req) {
req.setRequestHeader('RequestVerificationToken', token);
}
},
create: {
url: config.bookingSchedulersUrl,
dataType: "json",
type: "POST",
beforeSend: function (req) {
req.setRequestHeader('RequestVerificationToken', token);
}
},
destroy: {
url: function (data) {
alert(data.BookingSchedulerID);
return config.bookingSchedulersUrl + "(" + data.BookingSchedulerID + ")";
},
dataType: "json",
type: "DELETE",
beforeSend: function (req) {
req.setRequestHeader('RequestVerificationToken', token);
}
}
},
error: function (e) {
alert(e.xhr.responseText);
},
requestEnd: function(e){
//if (e.type == "update") {
// openMessageWindow("#popup-message-template", messageViewModel("Edited Successfully.", "MESSAGE", false));
// var scheduler = $("#scheduler").data("kendoScheduler");
// scheduler.view(scheduler.view().name);
//}
//if (e.type == "create") {
// openMessageWindow("#popup-message-template", messageViewModel("Created Successfully.", "MESSAGE", false));
// var scheduler = $("#scheduler").data("kendoScheduler");
// scheduler.view(scheduler.view().name);
//}
if (e.type == "destory") {
openMessageWindow("#popup-message-template", messageViewModel("Deleted Successfully.", "MESSAGE", false));
var scheduler = $("#scheduler").data("kendoScheduler");
scheduler.view(scheduler.view().name);
}
},
schema: {
data: function (data) {
return data.value;
},
total: function (data) {
return parseInt(data["odata.count"]);
},
model: {
id: "bookingSchedulerID",
fields: {
bookingSchedulerID: { from: "BookingSchedulerID", type: "number" },
bookingItemID: { from: "BookingItemID", type: "number", defaultValue: data.BookingItemID },
itemBreakdownID: { from: "ItemBreakdownID", type: "number", nullable: true },
title: { from: "BookingUser", defaultValue: userName },
start: { type: "date", from: "Start" },
end: { type: "date", from: "End" },
roomId: { from: "RoomID", type: "number", nullable: true },
staffId: { from: "StaffID", type: "number", nullable: true },
startTimezone: { from: "StartTimezone" },
endTimezone: { from: "EndTimezone" },
description: { from: "Description" },
recurrenceId: { from: "RecurrenceID" },
recurrenceRule: { from: "RecurrenceRule" },
recurrenceException: { from: "RecurrenceException" },
isAllDay: { type: "boolean", from: "IsAllDay" },
image: { from: "ItemBreakdown.ItemBreakdownImageURL" },
itemBreakdownName: { from: "ItemBreakdown.ItemBreakdownName" },
color: { from: "ItemBreakdown.Color" }
}
}
},
serverFiltering: true,
filter: {
field: "BookingItemID",
operator: "eq",
value: data.BookingItemID
}
}),
Any one can help, Thanks.