Использование Kendo Grid для создания новой встроенной записи. Как мне обновить идентификатор ключа для новой записи?

В моей сетке кендо у меня есть кнопка по умолчанию «Добавить новую запись», и я настроил ее на встроенное редактирование. Мне удалось вставить запись в базу данных, но когда пользователь обновляет эту новую запись, ему не хватает идентификатора.

Мой код выглядит так:

var dataSource = new kendo.data.DataSource(
{
    transport: {
        read: {
            url: '/Reports/Manage/Reports'
        },
        create: {
            url: function (options) {
                debugger;
                // Ajax call to create a new record in the database
                $.ajax(
                    {
                        type: 'POST',
                        url: '/Reports/Manage/CreateNewReport',
                        data: { name: options.name },
                        success: function (response) {

Мне тут что-то делать???

                            return;
                        },
                        error: function (repsonse) {
                            alert("Manage: CreateNewReport -> Ajax Error!");
                        }
                    });
                return;
            },
            dataType: "json"
        },
        update: {
            url: function (options) {
                // Ajax call to update the Report Name in the database.
                $.ajax(
                    {
                        type: 'POST',
                        url: '/Reports/Manage/UpdateReportName',
                        data: { reportId: options.reportId, name: options.name },
                        success: function (response) {
                            // do nothing
                            // alert("Successfully Saved Note.");
                        },
                        error: function (repsonse) {
                            alert("Manage: UpdateReportName -> Ajax Error!");
                        }
                    });
                return;
            },
            dataType: "json"
        }
    },
    pageSize: 15,
    height: 500,
    data: reports,
    schema:
    {
        model:
        {
            id: 'reportId',
            fields:
            {
                name: { editable: true, validation: { required: true } },
            }
        }
    }
});


$reports.kendoGrid(
{
    dataSource: dataSource,
    pageable: {
        refresh: true,
        pageSizes: true
    },
    toolbar: ["create"],
    columns:
    [
        { field: 'name', title: 'Report', sortable: true },
        { command: ["edit", "destroy"], title: " ", width: "180px", }
    ],
    editable: "inline",
    selectable: true,
    change: function (e) {
        // A new report was selected.
        ...
    }
});

person Rodney    schedule 21.09.2012    source источник


Ответы (1)


Вы должны вернуть идентификатор вновь созданного элемента с сервера. Проверьте ответ сервера здесь: http://demos.kendoui.com/web/grid/editing-inline.html

Также вы должны использовать встроенную транспортную конфигурацию. DataSource не знает об ответе сервера, если вы таким образом захватываете функцию URL. Вот что я имею в виду:

transport: {
   create: {
      url: "/Reports/Manage/CreateNewReport",
      type: "POST"
   },
   parameterMap: function(options, type) {
      if (type == "create") {
          return {
             reportId: options.reportId, 
             name: options.name
          };
      }
      return options;
   }
}

Вот несколько полностью работающих примеров, которые показывают, как реализовать CRUD:

person Atanas Korchev    schedule 22.09.2012
comment
Атанас - я пытался ввести параметрMap, но у меня это не работает. Я поставил перерыв, и options.reportId имеет значение null. Это моя проблема. Поэтому, когда я обновляю только что добавленное значение, создается вторая запись вместо обновления существующей. - person Rodney; 24.09.2012
comment
Вы изменили свой URL-адрес на строку вместо функции? Это обязательно для работы parameterMap. Нужно сделать URL-адрес функцией только для возврата динамически созданного URL-адреса. - person Atanas Korchev; 25.09.2012
comment
У меня должна быть функция, потому что я делаю некоторые вызовы ajax при создании. - person Rodney; 25.09.2012
comment
Ну это не поддерживается. Как я уже сказал, URL-адрес следует задавать как функцию, только если вы хотите создать собственную строку URL-адреса. Выполнение запросов ajax не поддерживается, поскольку источник данных никогда не будет обновляться внутри. С другой стороны, код, который я вставил, также сделает запрос ajax. Вы пробовали? - person Atanas Korchev; 25.09.2012