2015-12-09 4 views
0

У меня есть сетка кендо, где я показываю список документов, загруженных пользователем. В сетке у меня есть кнопка «Удалить», которая запускает функцию dataSource «destroy», которая вызывает класс службы удаления. Для достижения удаления документа Я передаю documentId, который был выбран пользователем в запросе к классу обслуживания, выполнив следующие действия в моем источнике данных:Kendo grid: destroy не работает

destroy: { 
         url: function (options) { 
          options.IsActive = false; 
          // type: "POST";        
          contentType: "application/json; charset=utf8"; 
          return constants.serviceUrl + "Document/Delete?id=" + options.DocumentId; 
         }, 
        }, 
        dataType: "json", 
        contentType: "application/json" 
       }, 

По какой-то причине, наряду с documentId он, добавив все данные связанный с этим документом, который я не намерен делать. Вот как выглядит URL-адрес в скрипаче.

http://localhost/Services/HumanResources/api/Document/Delete?id=2&DocumentId=2&ReviewId=0&DocumentTypeId=2&Name=Applications+to+Install.docx&DocumentData=UEsDBBQABgAIAAAAIQCUZeTvkgEAAK4HAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAe&CreatedById=00000000-0000-0000-0000-000000000000&CreatedDate=0001-01-01T00%3A00%3A00&RawFileName=&DocumentTypeName=Manager 

Я установил точку останова для своей функции destroy и удостоверился, что documentID просто имеет номер больше ничего. Из-за этого длинного URL-адреса, который является неправильным, класс обслуживания никогда не попадает. Ниже то, что обманщик говорит:

> HTTP/1.1 414 Request-URI Too Long 
Content-Type: text/html; charset=us-ascii 
Server: Microsoft-HTTPAPI/2.0 
Date: Wed, 09 Dec 2015 15:00:46 GMT 
Connection: close 
Content-Length: 329 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> 
<HTML><HEAD><TITLE>Request URL Too Long</TITLE> 
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD> 
<BODY><h2>Request URL Too Long</h2> 
<hr><p>HTTP Error 414. The request URL is too long.</p> 
</BODY></HTML> 

Любая идея, что моя функция уничтожить это добавление всех дополнительные данных, которые я даже не проходящие по ссылке URL службы?

ответ

0

Я думаю, что кендо dataSouce по умолчанию добавляет всю модель в каждый метод ajax. Вы можете написать свою собственную карту параметров параметров, как в этом примере: http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#configuration-transport.destroy

Но вам нужно проверить, сохраняют ли данные чтения/обновления/создания правильные данные.

Так что добавьте к вашему DATASOURCE parameterMap возвращающегося пустому объекта для уничтожения типа запроса и просто передать свойства модели для других:

parameterMap: function(data, type) { 
    if (type === "destroy") { 
    return { }; 
    } 
    else { 
     return { models: kendo.stringify(data.models) }; 
    } 
} 
+0

Привет @Jaroslaw. Спасибо, что указал мне в правильном направлении. Я не знаю, почему вызов destroy был добавлением всей модели в ajax-вызов. но выполнение вышеуказанной проблемы исправлено. Я не понимаю, что возвращает {} do под типом === "destroy" –

+0

Ouch, return {} переопределяет поведение по умолчанию kendo по умолчанию и возвращает пустой объект. Вы также можете изменить свою функцию url-url, удалив DocumentId и вернитесь сюда: 'return {id: options.DocumentId};' И вы, вероятно, все еще хотите «читать», «обновлять» и «создавать», работают так же, как и вы должны просто вернуть ничего для типа destroy. (=== то же самое, что ==, но он также сравнивает тип данных, и это хороший способ использовать === вместо ==). –

+0

спасибо за объяснение! имеет смысл :) –

Смежные вопросы