Редактирование jqGrid и отправка данных в .NET MVC Webservice - PullRequest
0 голосов
/ 15 сентября 2011

Кажется, у меня проблема с настройкой моего веб-сервиса при попытке сохранить данные строк из моего jqGrid. Данные возвращаются нормально; сетка прекрасно загружает данные, и окно редактирования отображается нормально, когда я нажимаю на карандаш. Я проверил тело запроса с помощью инструментов IE Developer, и он показывает данные вроде: Step_Number = 1 & oper = edit & id = 1 Я знаю, что что-то не хватает в том, как я настроил этот метод и как позвонил, но я не могу на всю жизнь найти ответы, которые я ищу.

Что мне нужно, чтобы отформатировать данные в JSON и отправить их, и что я должен иметь в своем методе .Net для приема данных?

Спасибо за любую помощь, которую вы можете оказать.

[WebInvoke(Method = "POST", UriTemplate = "/Save/JSA", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public string UpdateRecord()
{}

**Update** This is the one that works
[WebInvoke(Method = "POST", UriTemplate = "/Save/JSA", BodyStyle = WebMessageBodyStyle.Wrapped,  RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public string UpdateJSA(string Step_Number, string Step_Description, string oper, string id)
{}

Когда я использую вышеупомянутое, функция работает, но я не получаю данных. В тот момент, когда я ввел параметр, мой код просто сломался. Вот мой код jqGrid, который я использую:

$.getJSON('FileServices/Get/JSA/' + id, function (data) {
$("#list").jqGrid({
    url: 'FileServices/GetList/JSA',
    cellEdit: true,
    editurl: 'FileServices/Save/JSA',
    //serializeRowData: function (data) { return JSON.stringify(data); },
    datatype: 'local',
    gridComplete: function () {
            $("#list").jqGrid('setGridParam', {}).trigger("reloadGrid");
    },
    onSelectRow: function (rowid, status) {
    },
    loadComplete: function (data) {
            var det = $("#details");
            $("#list").setGridWidth(det.width() - 18, true);
    },
    colNames: ['Id', 'Step Number', 'Step Description'],
    colModel: [
      { name: 'Id', index: 'Id', width: 30, sortable: false, hidden: true },
      { name: 'Step_Number', editable: true,  index: 'Step_Number', align: 'center', width: 50,  fixed: true, resizable: false, sortable: false, title: false, cellattr: function (rowId, tv, rawObject, cm, rdata) { return 'style="white-space: normal; vertical-align: top;' } },
      { name: 'Step_Description', index: 'Step_Description', sortable: false, width: 400, cellattr: function (rowId, tv, rawObject, cm, rdata) { return 'style="white-space: normal; vertical-align: top;' } }
    ],
    pager: '#pager',
    rowNum: 5,
    rowList: [5, 10, 15, 20, 25, 30, 50],
    sortname: 'Id',
    height: 'auto',
    rownumbers: true,
    autowidth: true,
    forceFit: true,
    shrinkToFit: true,
    sortorder: 'asc',
    viewrecords: true,
    gridview: true,
    hidegrid: false,
    caption: ''
});

$.extend($.jgrid.edit, {
    ajaxEditOptions: { contentType: "application/json" },
    recreateForm: true,
    serializeEditData: function (postData) {
        return JSON.stringify(postData);
    }
});

var thegrid = $("#list");

for (var i = 0; i < data.details.length; i++) {
    thegrid.addRowData(i + 1, data.details[i]);
}

thegrid.navGrid("#pager");
});

1 Ответ

1 голос
/ 15 сентября 2011

Вы разместили не весь код, который требуется.Вы написали «когда я щелкаю карандашом», поэтому я предполагаю, что вы где-то используете navGrid, но как и с какими параметрами? ... В любом случае вы устанавливаете jQuery.jgrid.edit неправильно.Код должен выглядеть примерно так:

$.extend($.jgrid.edit, {
    ajaxEditOptions: { contentType: "application/json" },
    recreateForm: true,
    serializeEditData: function (postData) {
        return JSON.stringify(postData);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...