or
using System.Data.Entity;using System.Linq;using System.Web;using System.Web.Mvc;using CustomerService.Models;using System.Web.Security;using System.Security.Principal;using Kendo.Mvc.UI;using Kendo.Mvc.Extensions;namespace CustomerService.Controllers{ [Authorize] public class CaseController : Controller { private ERPEntities db = new ERPEntities(); public ActionResult Cases_Read([DataSourceRequest]DataSourceRequest request) { IQueryable<CaseHeader> cases = db.CaseHeaders; DataSourceResult result = cases.ToDataSourceResult(request); return Json(result, JsonRequestBehavior.AllowGet); } public ActionResult Cases_Create([DataSourceRequest]DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<CaseHeader> cases) { // Will keep the inserted entitites here. Used to return the result later. var entities = new List<CaseHeader>(); if (ModelState.IsValid) { foreach (var x in cases) { // Create a new Product entity and set its properties from the posted ProductViewModel var entity = new CaseHeader { CaseHeaderId = x.CaseHeaderId, Creator = x.Creator, CreatedDate = x.CreatedDate, CaseLead = x.CaseLead, CaseSubType1 = x.CaseSubType1, CaseSubType2 = x.CaseSubType2, CaseStatus = x.CaseStatus, CaseTitle = x.CaseTitle, CaseDescription = x.CaseDescription, CaseContact = x.CaseContact }; // Add the entity db.CaseHeaders.Add(entity); // Store the entity for later use entities.Add(entity); } // Insert the entities in the database db.SaveChanges(); } // Return the inserted entities. The grid needs the generated ProductID. Also return any validation errors. return Json(entities.ToDataSourceResult(request, ModelState, x => new CaseHeader { CaseHeaderId = x.CaseHeaderId, Creator = x.Creator, CreatedDate = x.CreatedDate, CaseLead = x.CaseLead, CaseSubType1 = x.CaseSubType1, CaseSubType2 = x.CaseSubType2, CaseStatus = x.CaseStatus, CaseTitle = x.CaseTitle, CaseDescription = x.CaseDescription, CaseContact = x.CaseContact })); } public ActionResult Cases_Update([DataSourceRequest]DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<CaseHeader> cases) { // Will keep the updated entitites here. Used to return the result later. var entities = new List<CaseHeader>(); if (ModelState.IsValid) { foreach (var x in cases) { // Create a new Product entity and set its properties from the posted ProductViewModel var entity = new CaseHeader { CaseHeaderId = x.CaseHeaderId, Creator = x.Creator, CreatedDate = x.CreatedDate, CaseLead = x.CaseLead, CaseSubType1 = x.CaseSubType1, CaseSubType2 = x.CaseSubType2, CaseStatus = x.CaseStatus, CaseTitle = x.CaseTitle, CaseDescription = x.CaseDescription, CaseContact = x.CaseContact }; // Store the entity for later use entities.Add(entity); // Attach the entity db.CaseHeaders.Attach(entity); // Change its state to Modified so Entity Framework can update the existing product instead of creating a new one db.Entry(entity).State = EntityState.Modified; // Or use ObjectStateManager if using a previous version of Entity Framework // northwind.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified); } // Update the entities in the database db.SaveChanges(); } // Return the updated entities. Also return any validation errors. return Json(entities.ToDataSourceResult(request, ModelState, x => new CaseHeader { CaseHeaderId = x.CaseHeaderId, Creator = x.Creator, CreatedDate = x.CreatedDate, CaseLead = x.CaseLead, CaseSubType1 = x.CaseSubType1, CaseSubType2 = x.CaseSubType2, CaseStatus = x.CaseStatus, CaseTitle = x.CaseTitle, CaseDescription = x.CaseDescription, CaseContact = x.CaseContact })); } public ActionResult Cases_Destroy([DataSourceRequest]DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<CaseHeader> cases) { // Will keep the destroyed entitites here. Used to return the result later. var entities = new List<CaseHeader>(); if (ModelState.IsValid) { foreach (var x in cases) { // Create a new Product entity and set its properties from the posted ProductViewModel var entity = new CaseHeader { CaseHeaderId = x.CaseHeaderId, Creator = x.Creator, CreatedDate = x.CreatedDate, CaseLead = x.CaseLead, CaseSubType1 = x.CaseSubType1, CaseSubType2 = x.CaseSubType2, CaseStatus = x.CaseStatus, CaseTitle = x.CaseTitle, CaseDescription = x.CaseDescription, CaseContact = x.CaseContact }; // Store the entity for later use entities.Add(entity); // Attach the entity db.CaseHeaders.Attach(entity); // Delete the entity db.CaseHeaders.Remove(entity); // Or use DeleteObject if using a previous versoin of Entity Framework // northwind.Products.DeleteObject(entity); } // Delete the entity in the database db.SaveChanges(); } // Return the destroyed entities. Also return any validation errors. return Json(entities.ToDataSourceResult(request, ModelState, x => new CaseHeader { CaseHeaderId = x.CaseHeaderId, Creator = x.Creator, CreatedDate = x.CreatedDate, CaseLead = x.CaseLead, CaseSubType1 = x.CaseSubType1, CaseSubType2 = x.CaseSubType2, CaseStatus = x.CaseStatus, CaseTitle = x.CaseTitle, CaseDescription = x.CaseDescription, CaseContact = x.CaseContact })); } }}@model IEnumerable<CustomerService.Models.CaseHeader>@{ ViewBag.Title = "Index";}<h2>Your Cases</h2>@(Html.Kendo().Grid<CustomerService.Models.CaseHeader>() .Name("grid") .Columns(columns => { columns.Bound(x => x.CaseHeaderId); columns.Bound(x => x.Creator); columns.Bound(x => x.CreatedDate); columns.Bound(x => x.CaseLead); columns.Bound(x => x.CaseType); columns.Bound(x => x.CaseSubType1); columns.Bound(x => x.CaseSubType2); columns.Bound(x => x.CaseStatus); columns.Bound(x => x.CaseTitle); columns.Bound(x => x.CaseDescription); columns.Bound(x => x.CaseContact); columns.Command(commands => { commands.Destroy(); // The "destroy" command removes data items }).Title("Commands").Width(200); }) .ToolBar(toolbar => { toolbar.Create(); // The "create" command adds new data items toolbar.Save(); // The "save" command saves the changed data items }) .Editable(editable => editable.Mode(GridEditMode.InCell)) // Use in-cell editing mode .DataSource(dataSource => dataSource.Ajax() .Batch(true) // Enable batch updates .Model(model => { model.Id(x => x.CaseHeaderId); // Specify the property which is the unique identifier of the model model.Field(x => x.CaseHeaderId).Editable(false); // Make the CaseHeaderId property not editable model.Field(x => x.CreatedDate).Editable(false); }) .Create(create => create.Action("Cases_Create", "Case")) // Action method invoked when the user saves a new data item .Read(read => read.Action("Cases_Read", "Case")) // Action method invoked when the grid needs data .Update(update => update.Action("Cases_Update", "Case")) // Action method invoked when the user saves an updated data item .Destroy(destroy => destroy.Action("Cases_Destroy", "Case")) // Action method invoked when the user removes a data item ) .Pageable())using System;using System.Collections.Generic;namespace CustomerService.Models{ public partial class CaseHeader { public CaseHeader() { this.Notes = new HashSet<Note>(); } public System.Guid CaseHeaderId { get; set; } public System.Guid UserId { get; set; } public string Creator { get; set; } public Nullable<System.DateTime> CreatedDate { get; set; } public string CaseLead { get; set; } public string CaseType { get; set; } public string CaseSubType1 { get; set; } public string CaseSubType2 { get; set; } public string CaseStatus { get; set; } public string CaseTitle { get; set; } public string CaseDescription { get; set; } public string CaseContact { get; set; } public virtual aspnet_Users aspnet_Users { get; set; } public virtual ICollection<Note> Notes { get; set; } } }using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.ComponentModel.DataAnnotations;namespace CustomerService.Models{ [MetadataType(typeof(CaseHeaderMetaData))] public partial class CaseHeader { } public class CaseHeaderMetaData { public System.Guid CaseHeaderId { get; set; } public System.Guid UserId { get; set; } [MaxLength(50, ErrorMessage = "Too Long!")] public string Creator { get; set; } public Nullable<System.DateTime> CreatedDate { get; set; } public string CaseLead { get; set; } public string CaseType { get; set; } public string CaseSubType1 { get; set; } public string CaseSubType2 { get; set; } public string CaseStatus { get; set; } public string CaseTitle { get; set; } public string CaseDescription { get; set; } public string CaseContact { get; set; } public virtual aspnet_Users aspnet_Users { get; set; } public virtual ICollection<Note> Notes { get; set; } } [MetadataType(typeof(UserProfileMetaData))] public partial class UserProfile { } public class UserProfileMetaData { public System.Guid UserId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } [Display(Name = "Request Company")] public string Company { get; set; } public string CompanyNumber { get; set; } public virtual aspnet_Users aspnet_Users { get; set; } } }<link rel="stylesheet" href="@Url.Content("~/Content/Kendo/kendo.common.min.css")"><link rel="stylesheet" href="@Url.Content("~/Content/Kendo/kendo.default.min.css")"><link rel="stylesheet" href="@Url.Content("~/Content/Kendo/kendo.common-bootstrap.min.css")"><link rel="stylesheet" href="@Url.Content("~/Content/Kendo/kendo.bootstrap.min.css")"/>
@(Html.Kendo().Grid(Model) .Name("Grid") .Columns(columns => { foreach (System.Data.DataColumn column in Model.Columns) { columns.Bound(column.ColumnName).Hidden(column.ColumnName == "CustID").Title(column.ColumnName.ToString().Replace(" ", "")); } columns.Bound("CustID").Title("").ClientTemplate("<a href='/Customers/Customer/#: CustID #'>More Details</a>"); }) .Pageable() .Sortable() .Filterable() .DataSource(dataSource => dataSource .Ajax() .PageSize(15) .ServerOperation(false) .Model(model => { foreach (System.Data.DataColumn column in Model.Columns) { model.Field(column.ColumnName, column.DataType); } }) .Read(read => read.Action("CustomerDataRead", "Customers", new { _CustomerListID = 18 })) ))function select(e) { var dataItem = this.dataItem(e.item.index()); if (dataItem.CustomerListID == "") {dataItem.CustomerListID = -1} //$('#Grid').data().kendoGrid.destroy(); //$('#Grid').empty(); $("#Grid").data("kendoGrid").dataSource.read({ _CustomerListID: dataItem.CustomerListID});}When I have the data source CRUD set in the Razor version of the Scheduler control AND I define events for Save and Remove the call to the Read and Destroy calls are duplicated.
Is this the correct behavior?
01.<input type="hidden" id="scheduleID" required data-required-msg="Please select a schedule."/>02. 03.@(Html.Kendo().Scheduler<DOTTReportsWebViewer.Models.TaskViewModel>()04. .Name("scheduler")05. .Editable(e=>e06. .Confirmation(false)07. .Update(false)08. .Resize(false)09. )10. .Date(DateTime.Now)11. .StartTime(new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, 00, 00))12. .Views(views =>13. {14. views.DayView();15. views.WeekView(weekView => weekView.Selected(true));16. views.MonthView();17. views.AgendaView();18. })19. .Timezone("Etc/UTC")20. .DataSource(d => d21. .Model(m => {22. m.Id(f => f.TaskID);23. m.Field(f => f.OwnerID).DefaultValue(1);24. })25. 26. .Read("Tasks_Read", "Subscriptions")27. .Create("Tasks_Create", "Subscriptions")28. .Destroy("Tasks_Destroy", "Subscriptions")29. .Update("Tasks_Update", "Subscriptions")30. 31. )32. .Events(events => events33. .Save("scheduler_save")34. .Remove("scheduler_remove")35. )36. 37. 38.)39. 40. 41.<script type="text/javascript">42. 43. function scheduler_save(e) {44. 45. var scheduler = $("#scheduler").data("kendoScheduler");46. 47. if ($("#scheduleID").val() != '') {48. scheduler.removeEvent($("#scheduleID").val());49. }50. $("#scheduleID").val(e.event.uid);51. }52. 53. function scheduler_remove(e) {54. $("#scheduleID").val('');55. 56. }57. 58.</script>