Подтвердить что ты не робот

Команда удаления команды kendo не работает

Я разработал веб-приложение с помощью kendo ui tools, а theres - сетку кендо с режимом пакетного редактирования..

но когда я нажимаю кнопку удаления для любой записи в сетке кендо, она будет удаляться из списка в сетке, но на самом деле не в источнике данных. Когда я перезагружаю страницу или сетку, удаленный элемент все равно будет существовать.

вот код моей сетки

<div id="grid">
        </div>
        <script type="text/javascript">

            $("#submitMarketUser").click(function () {
                var grid = $("#grid").data("kendoGrid");
                var dataSource = new kendo.data.DataSource({
                    transport: {
                        read: {
                            url: "WholeSaleTrade/GetTradeProductDetail",
                            dataType: "json",
                            data: {
                                test: $("#Names").val()
                            }
                        },
                        destroy: {
                            url: "WholeSaleTrade/DeletePro",
                            type: "POST",
                            dataType: "jsonp",
                            data: {
                                DAKy: $("#Names").val(),
                                DIKy: $("#btntxt").val()
                            }
                        },
                        create: {
                            url: "WholeSaleTrade/CreateProduct",
                            type: "POST",
                            dataType: "jsonp",
                            data: {
                                AKy: $("#Names").val(),
                                IKy: $("#btntxt").val()
                            }
                        }
                    },
                    pageSize: 5,
                    schema: {
                        model: {
                            id: "ProductKey",
                            fields: {
                                ProductKey: { editable: false, nullable: true },
                                ProductName: { validation: { required: true} }
                            }
                        }
                    }
                });
                $("#grid").kendoGrid({
                    dataSource: dataSource,
                    editable: true,
                    toolbar: ["create", "save"],
                    autobind: true,
                    pageable: true,
                    columns: [
                        { field: "ProductName", title: "Product Name",
                            editor: function (container, options) {
                                var model = options.model;
                                $('<input id="btntxt" name="' + options.field + '"/>').appendTo(container).kendoComboBox({
                                    dataSource: {
                                        type: "POST",
                                        transport: {
                                            read: {
                                                url: "MarketInformation/PopulateProducts",
                                                success: function (data) {
                                                    var prod = data[0];
                                                    model.set("ProductName", prod.ItmNm);
                                                    model.set("ItmKy", prod.ItmKy);
                                                    model.set("UserKey", $("#Names").val());
                                                }
                                            }
                                        }
                                    },

                                    dataValueField: "ItmKy",
                                    dataTextField: "ItmNm"
                                });
                            }
                        },
                        { command: ["destroy"], title: "&nbsp;" }
                    ]
                });
            });

        </script>

не может определить, где происходит ошибка, и кто-нибудь может помочь мне решить этот вопрос.

4b9b3361

Ответ 1

Существует три распространенных причины, по которым удаление не будет работать:


1. Не устанавливать editable сетки в inline или popup. Удаленные элементы будут автоматически обработаны посредством транспорта, уничтожающего только для режимов редактирования inline/popup. Пример:

editable: {
   mode: "inline",
}
//or
editable: "inline"


2. Если на вашем источнике данных установлен флаг batch, установленный на true, это означает, что источник данных сделает вызов только после того, как вы сообщите ему, например, называя sync(). Пример:

var dataSource = new kendo.data.DataSource({
    batch: true,
    //.....
});
//... in some where e.g in a save button click event call the following line:
dataSource.sync();


3.. Вы должны определить id для вашего первичного ключа имени поля базы данных внутри model источника данных. Пример:

   model: {
        id: "ProductID",
        fields: {
            ProductID: { editable: false, nullable: true },
        }
    }


Таким образом, проблема с вашим кодом является первой, т.е. Вы не установили editable в inline или popup

Ответ 2

Если вы решили не включать editable.mode, чтобы использовать редактирование в ячейке, вы можете установить toolbar сетки, чтобы включить опцию save:

$("#grid").kendoGrid({
    dataSource: {
        transport: {
            ....
        },
        schema: {
            ....
        }
    },                        
    toolbar: ["create", "save", "cancel"],
    columns: [
        ....
    ],
    editable: true
});

Это создаст кнопку save на панели инструментов сетки. После удаления любых записей, нажав кнопку destroy, нажмите кнопку save, чтобы сетка сделала вызов Ajax серверу, чтобы удалить запись.

Если вы предпочитаете удалять запись автоматически, не включая кнопку save, вы можете добавить обработчик события change в datasource сетки:

$("#grid").kendoGrid({
    dataSource: {
        transport: {
            ....
        },
        schema: {
            ....
        },
        change: function(e) {
            if (e.action === "remove") {
                this.sync();
            }
        }
    },                        
    columns: [
        ....
    ],
    editable: true
});

Это автоматически синхронизирует изменения, внесенные вами в сетку с сервером при изменении данных.

Ответ 3

Хмм попробуем не включать type: "POST", и посмотреть, работает ли он сейчас, поскольку я вижу, что этот бит не включен в демонстрацию, и я не думаю, что я включил его, когда я последний раз редактировал/удалял встроенные изменения.

Ответ 4

Я поставил имя арбитра для int на методе удаления сервера.

    [HttpPost]
    public ActionResult DeleteRandomTest(Int32 randomTestId)
    {
         ...
    }

По умолчанию модель-связыватель, вероятно, искал свойство Id (то же, что и первичный ключ моего типа в соответствии с конфигурацией модели).

 .Model(config => config.Id(p => p.Id))

Фактически, я доказал это, изменив подпись на следующее:

    [HttpPost]
    public ActionResult DeleteRandomTest(Int32 Id)
    {
        ...
    }

Моя точка останова была удалена после этого.

В конечном счете, я использовал полный тип в качестве параметра, как показано в примерах Kendo, потому что я не хотел иметь имена с именованными именами (не верблюд) в действии. Отображается следующим образом:

    [HttpPost]
    public ActionResult DeleteRandomTest([DataSourceRequest]
         DataSourceRequest request, RandomDrugTest randomDrugTest)
    {
       ...
    }

Это, по-видимому, причина, по которой он не работал.

Ответ 5

У меня была такая же проблема. Моя проблема была вызвана наличием свойства data в модели кендо. Пример:

{id: 1, data: ""}