I am returning errors from server and catch it in kendo datasource error event.In this event I am trying to prevent close popup editor, but it works only first time, after clicking update second time, the window closes.
I searched a lot but could not find a solution
City = { InitializeGrid: function () { function LoadCities(url, success) { Common.serverRequest(url, success); } function UpdateCity(url, params, success) { Common.serverRequestParams(url, params, success); } function InsertCity(url, params, success) { Common.serverRequestParams(url, params, success); } function DeleteCity(url, id, success) { Common.serverRequestParams(url, id, success); } dataSource = new kendo.data.DataSource({ transport: { read: function (e) { LoadCities("/home/read", function (res) { e.success(res); }); }, update: function (e) { UpdateCity("/home/update", e.data, function (res) { var grid = $("#grid").data("kendoGrid"); if (res.success) { grid.dataSource.read(); } else { e.error("", "", res.error); grid.cancelChanges(); } }); }, create: function (e) { InsertCity("/home/insert", e.data, function (res) { var grid = $("#grid").data("kendoGrid"); if (res.success) { grid.dataSource.data(res.data); } else { e.error("", "", res.error); grid.cancelChanges(); } }); }, destroy: function (e) { DeleteCity("/home/delete", e.data, function (res) { var grid = $("#grid").data("kendoGrid"); if (res.success) { grid.dataSource.data(res.data); } else { e.error("", "", res.error); grid.cancelChanges(); } }); } }, error: function (e) { var grid = $("#grid").data("kendoGrid"); grid.one("dataBinding", function (e) { e.preventDefault(); // it occures only first time }); alert(e.errorThrown); }, pageSize: 20, schema: { model: { id: "Id", fields: { Name: { type: "string" }, EndDate: { type: "date" }, CreateDate: { type: "date" } } } } }); $("#grid").kendoGrid({ dataSource: dataSource, height: 750, selectable: "single", filterable: true, sortable: true, pageable: true, toolbar: [{ name: "newRecord", text: "New Record" }, { name: "editRecord", text: "Edit REcord" }, { name: "deleteRecord", text: "Delete" }], columns: [ { field: "Name", title: "Name" }, { field: "EndDate", title: "End Date", format: "{0:dd.MM.yyyy hh:mm}" }, { field: "CreateDate", title: "Create Date", format: "{0:dd.MM.yyyy hh:mm}" } ], editable: { mode: "popup", confirmation: false, template: kendo.template($("#popup_editor").html()) } }); $("#grid").on("click", ".k-grid-newRecord", function () { Common.gridAdd('grid', 'New Record'); }); $("#grid").on("click", ".k-grid-editRecord", function () { Common.gridEdit('grid', 'Edit Record'); }); $("#grid").on("click", ".k-grid-deleteRecord", function () { Common.gridDelete('grid'); }); }}
mvc controler
public class HomeController : Controller { List<City> cities; public string error { get; set; } public bool isSuccess { get; set; } = true; public ActionResult Index() { cities = new List<City>(); Session["city"] = cities; return View(); } public ActionResult Read() { var result = (List<City>)Session["city"]; return Json(result); } public ActionResult Update(City item) { var result = (List<City>)Session["city"]; if (string.IsNullOrEmpty(item.Name)) { error = "Name is required"; isSuccess = false; } result.Where(w => w.Id == item.Id).SingleOrDefault(s => s == item); return Json(new { success = isSuccess, error =error, data = item }); } public ActionResult Insert(City item) { var result = (List<City>)Session["city"]; item.Id = result.Count; item.Id++; if (string.IsNullOrEmpty(item.Name)) { error = "Name is required"; isSuccess = false; } result.Add(item); return Json(new { success = isSuccess, error = error, data = item }); } public ActionResult Delete(City item) { var result = (List<City>)Session["city"]; result.Remove(item); return Json(new { success = isSuccess }); } }