Пользовательская функция удаления в jqGrid

Я пытаюсь настроить функцию удаления в jqGrid.

Я включил кнопку удаления в сетке

$("#myGrid").jqGrid('navGrid', '#pager',
    { add: true, addtitle: 'Add Customer',
        edit: true, edittitle: 'Edit Customer',
        del: true, deltitle: 'Delete Customer',
        refresh: true, refreshtitle: 'Refresh data',
        search: true, searchtitle: 'Apply filters', 
        addfunc: addForo, editfunc: editForo, 
        cloneToTop: true
    },
    {}, // default settings for edit
    {}, // default settings for add
    {}, // default settings for delete
    { closeOnEscape: true, multipleSearch: true, closeAfterSearch: true }, // search options
    {} // default settings for view
);

затем я добавил (благодаря этому сообщению) следующий код

$("#bDelete").click(function () {
    // Get the currently selected row
    toDelete = $("#myGrid").jqGrid('getGridParam', 'selrow');
    $("#myGrid").jqGrid(
        'delGridRow',
        toDelete,
        { url: '/Foro/Delete/' + toDelete, mtype: 'post', reloadAfterSubmit: false }
    );
});

Теперь, когда я нажимаю кнопку удаления, отображается диалоговое окно с запросом подтверждения удаления. Но если я нажму на кнопку удаления, я получу следующее сообщение об ошибке

alt text

Где я не прав?


person Lorenzo    schedule 17.10.2010    source источник


Ответы (1)


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

$("#myGrid").jqGrid('navGrid', '#pager',
    // define navGrid options and paraneters of Edit and Add dialogs
    { // now define settings for Delete dialog
      mtype: "POST", reloadAfterSubmit: false,
      onclickSubmit: function(rp_ge, postdata) {
          rp_ge.url = '/Foro/Delete/'+ postdata;
      },
      serializeDelData: function (postdata) { return ""; }
    },
    // search options
    // ...
);

Что касается onclickSubmit, мы можем изменить url, а определение serializeDelData мы можем очистить тело сообщения «POST». Лично я в основном использую службы RESTfull на стороне сервера и использую mtype: "DELETE". В случае очищения от тела это действительно необходимо.

Еще один вариант - использовать delfunc, как вы уже используете editfunc и addfunc. В большинстве случаев в использовании такой функции нет необходимости, и можно реализовать то же самое другим способом.

person Oleg    schedule 17.10.2010
comment
Спасибо за помощь. Оно работает. Есть ли способ получить результат звонка? Таким образом, я могу добавить отзывы пользователей. Еще раз спасибо - person Lorenzo; 17.10.2010
comment
Без проблем. Я нашел событие afterSubmit в вики документации - person Lorenzo; 17.10.2010
comment
@Lorenzo: Какой отзыв ты имеешь в виду? После какого звонка? Какой результат звонка (какой звонок) вы имеете в виду? - person Oleg; 17.10.2010
comment
@Lorenzo: Я также использую afterSubmit, определенный как function (response, postdata), и декодирую с помощью jQuery.parseJSON(response.responseText); информацию, отправляемую с сервера, и добавляю / изменяю один дополнительный скрытый столбец RowVersion, который представляет временную метку данных и используется для оптимистической обработки согласованности. Если что-то и вы делаете? - person Oleg; 17.10.2010
comment
Под результатом я имел в виду результат ajax-вызова функции удаления на стороне сервера. Под обратной связью я имел в виду обратную связь, которая должна быть предоставлена ​​пользователю. Например: удаленная строка или строка не могут быть удалены, потому что .... Я нашел, как это сделать, используя событие afterSubmit. Спасибо - person Lorenzo; 17.10.2010
comment
@ Лоренцо: Хорошо! Я написал вопрос до того, как смог прочитать ваш предыдущий комментарий. А точнее afterSubmit использую только в случае успешного удаления. В случае ошибки моя серверная часть возвращает код ошибки HTTP вместо 200 OK, и я использую errorTextFormat для декодирования сообщения об ошибке, отправленного с сервера. Преимущество состоит в том, что я также декодирую исключения на сервере, которые мой код не выдает явно. - person Oleg; 17.10.2010
comment
В моем случае я всегда использую afterSubmit. В случае ошибки мой серверный код возвращает ответ в другом формате с настраиваемым заголовком http, который я проверяю внутри обработчика afterSubmit. - person Lorenzo; 17.10.2010
comment
@Lorenzo: Это чистый вопрос дизайна. Вы должны решить, что лучше для вашей сумки. Тем не менее, я бы порекомендовал вам проверить, какие сообщения об ошибках будут отображаться в вашей программе в случае исключений в коде вашего сервера. Например, вы можете смоделировать ошибку доступа к базе данных, прикрытие типа или какую-либо другую ошибку, которая вызывает исключение. Вы улавливаете все исключения в коде вашего сервера? Как выглядят сообщения об ошибках, которые видит пользователь? Какой сервер отправки в чехле (это можно увидеть в Fiddler или Firebub). В моем приложении MVC мне нужно реализовать errorTextFormat дескриптор. - person Oleg; 17.10.2010