Я использую пользовательский интерфейс Kendo с API-интерфейсом ASP.NET. Существует ProjectController, который имеет все необходимые методы.Kendo UI DataSource не запускает transport.destroy
Моя проблема заключается в том, что при нажатии на кнопку Delete
, сетка Кендо UI поднимет remove()
событие, но DataSource
никогда не вызывает transport.destroy
. Скорее, кажется, что вызывается tansport.create
. В transport.parameterMap
Я вижу, что операция создает вместо уничтожить.
Вот пример кода JavaScript:
$(document).ready(function() {
var apiUrl = '/api/projects/';
var dataType = 'json';
var dataSource = new kendo.data.DataSource({
batch: true,
autoSync: false,
transport: {
read: {
url: apiUrl,
dataType: dataType,
type: "GET"
},
update: {
url: apiUrl,
dataType: dataType,
type: "PUT"
},
destroy: {
url: apiUrl,
type: "DELETE"
},
create: {
url: apiUrl,
contentType: "application/json;charset=utf-8",
dataType: dataType,
type: "POST"
},
parameterMap: function (data, operation) {
console.log("Operation: " + operation);
if (operation === "create" && data.models) {
for (var i in data.models) {
var model = data.models[i];
if (model.ProjectId === 0) {
return kendo.stringify(model);
}
}
} else if (operation === "destroy") {
console.log("Data.Models: " + data.models);
console.log("Data.id: " + data.ProjectId);
return { id: data.ProjectId };
}
return data;
}
},
schema: {
id: "ProjectId",
model: {
fields: {
ProjectId: { type: "number", editable: false, nullable: false, defaultValue: 0 },
ProjectName: { type: "string", validation: { required: true } },
Status: { type: "string", validation: { required: true } },
IsActive: { type: "boolean" }
}
}
},
pageSize: 10,
serverPaging: false,
serverFiltering: false,
serverSorting: false
});
$("#projectsGrid").kendoGrid({
dataSource: dataSource,
groupable: false,
sortable: true,
pageable: {
refresh: true,
pageSizes: true
},
pageSize: 10,
toolbar: ["create"],
editable: "popup",
columns: [
{ field: "ProjectId", width: 30, title: "ID" },
{ field: "ProjectName", width: 180, title: "Project" },
{ field: "Status", width: 90, title: "Status" },
{ field: "IsActive", width: 40, title: "Is Active", type: "boolean", template: '<input type="checkbox" #if (IsActive) {# checked="checked" #}# disabled="disabled" />' },
{ command: ["edit", "destroy"], title: " ", width: "80px" }
],
remove: function (e) {
console.log("Delete button clicked.");
console.log("Project ID: " + e.model.ProjectId);
//dataSource.remove(e.model);
//dataSource.sync();
}
});
});
Web API работает отлично, когда запросы выполняются с помощью Fiddler, но Кендо UI Сетка показывает:
POST http://localhost:port/api/Projects
, когда он должен быть DELETE
.
Спасибо всем заранее!
На самом деле это не тот случай. Я вижу, что вызывается обращение к веб-API (независимо от того, я вызываю 'sync()' или если для параметра autoSync установлено значение true. Я попытался установить пакетное значение в false, но это вызвало еще одну проблему с 'transport.create Проблема заключается в том, что удаление не вызывает 'transport.destroy'. Он продолжает поднимать' transport.create', когда я удаляю элемент. –
Я не вижу ничего плохого в вашем коде. Попытайтесь посмотреть этот пост Ответ OnaBai объясняет требование Id в вашей модели, которое, кажется, вы не определили: http://stackoverflow.com/questions/16662223/why-does-the-kendoui-grid-transport-create-event-gets-raised-multiple-times -and – Vojtiik
Вот и все. Спасибо! Добавление id внутри модели - это решение. –