Syncfusion TreeGrid и Grid с WebAPI не работает при удалении - PullRequest
0 голосов
/ 05 мая 2019

Я установил treeGrid (такая же сетка), чтобы получать данные через ASP.NET WebAPI с помощью их DataManager:

var categoryID=15;
var dataManager = ej.DataManager({
    url: "/API/myrecords?categoryID=" + categoryID,
    adaptor: new ej.WebApiAdaptor()
});

$("#treeGridContainer").ejTreeGrid({
    dataSource: dataManager,
    childMapping: "Children",
    treeColumnIndex: 1,
    isResponsive: true,

    contextMenuSettings: {
        showContextMenu: true,
        contextMenuItems: ["add", "edit", "delete"]
    },
    contextMenuOpen: contextMenuOpen,
    editSettings: { allowEditing: true, allowAdding: true, allowDeleting: true, mode: 'Normal', editMode: "rowEditing" },

    columns: [
        { field: "RecordID", headerText: "ID", allowEditing: false, width: 20, isPrimaryKey: true },
        { field: "RecordName", headerText: "Name", editType: "stringedit" },

    ],

    actionBegin: function (args) {
        console.log('ActionBegin: ', args);
        if (args.requestType === "add") {
            //add new record, managed manually...
            var parentID = 0;
            if (args.level != 0) {
                parentID = args.parentItem.TaxonomyID;
            }
            args.data.TaxonomyID = 0;
            addNewRecord(domainID, parentID, args.data, args.model.selectedRowIndex);
        }
    }
});

GET работает отлично.

PUT работает нормально, так как я управляю им вручную, потому что он вообще не вызывается из DataManager, и в любом случае я хочу управлять обновлением записей в TreeGrid.

Проблема связана с DELETE, который вызывается DataManager, когда я нажимаю Удалить в контекстном меню над элементом в TreeGrid.

Звонит по следующему URL:

http://localhost:50604/API/myrecords?categoryID=15/undefined

и, очевидно, я получаю 405 (метод не разрешен)

Проблема связана с параметрами categoryID, которые нарушают схему RESTful, а DataManager не может понять, что параметр существует.

Возможным решением может быть отправка этого параметра в качестве переменной POST, но DataManager не может это сделать.

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

1 Ответ

1 голос
/ 06 мая 2019

При заполнении данных Tree Grid с помощью ejDataManger, действия CRUD будут выполняться с использованием встроенных сообщений Post (вставка), Put (обновление), Delete requestType независимо от URL-адресов CRUD. Поэтому для удаления записей не нужно связывать «removeUrl».

И, в приведенном примере кода параметр передается в URL для извлечения данных, следовательно, возникает сообщенная проблема. Используя метод addParams в ejQuery, мы можем передать параметр в URL. Вы можете найти пример кода для передачи параметра с помощью события Tree Grid load , и параметр извлекается на стороне сервера с помощью DataManager.

[html]  
var dataManager = ej.DataManager({ 
            url: "api/Values",          
            adaptor: new ej.WebApiAdaptor() 
        });  
        $("#treeGridContainer").ejTreeGrid({ 
            load: function (args) { 
                // to pass parameter on load time 
                args.model.query.addParams("keyId", 48); 
            }, 
  }); 

[controller] 
public object Get() 
        { 
            var queryString = HttpContext.Current.Request.QueryString; 
            // here we can get the parameter during load time 
            int num = Convert.ToInt32(queryString["keyId"]);                    
                //.. 
           return new {Items = DataList, Count = DataList.Count() }; 
        } 

Вы можете найти образец здесь для справки.

С уважением,

Синкфузионная команда

...