Это меня убивает. Я прочитал много комментариев Олега и документацию , но мне кажется, что я что-то упускаю действительно просто.
У меня есть jqGrid, заполненный вызовом веб-метода, который возвращает JSON. Нам там хорошо. Я использую Навигатор для своей кнопки «Добавить» и использую onSelectRow
w / jqGrid.editRow()
для своего редактирования.
Я получаю диалоговое окно при нажатии кнопки «Добавить» и могу заполнить все. Однако я получаю сообщение error Status: 'Internal Server Error'. Error code: 500
return после нажатия кнопки «Отправить». Используя Firebug, Response
это {"Message":"Invalid JSON primitive: FileType.","StackTrace":....
. и Post
является FileType=3&ExportDate=12%2F29%2F2010&oper=add&id=_empty
.
Очевидно, мой пост не становится "jsonified". Я пытался использовать serializeEditData
и beforeSubmit
в попытке вручную вернуть JSON.stringify(eparams);
, но ничего не помогло. Пожалуйста, смотрите мой код ниже.
WebMethod
<WebMethod()> _
<ScriptMethod()> _
Public Sub ModifyFileLog(ByVal FileType As String, _
ByVal ExportDate As Nullable(Of Date), _
ByVal oper As String, ByVal id As String)
Try
' blah
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
End Sub
JS - Globals
jQuery.extend(
jQuery.jgrid.defaults, {
type: "POST",
mtype: "POST",
datatype: "json",
ajaxGridOptions: { contentType: "application/json" },
ajaxRowOptions: { contentType: "application/json" },
rowNum: 10,
rowList: [10, 20, 30],
serializeGridData: function(data) {
return JSON.stringify(data);
},
gridview: true,
viewrecords: true,
sortorder: "asc"
},
jQuery.jgrid.edit, {
ajaxEditOptions: { contentType: "application/json" },
recreateForm: true,
serializeEditData: function(postData) {
return JSON.stringify(postData);
}
}
);
JS - jqGrid
var tblName = "tblFiles";
var pager1 = '#pagerFiles';
var grid = $("#" + tblName);
grid.jqGrid({
url: 'WebService.asmx/GetFileLog',
colNames: ['ID', 'File Type', 'Report Date', 'Export Date', 'EE Count'],
ajaxGridOptions: {
success: function(data, textStatus) {
if (textStatus == "success") {
ReceivedClientData(JSON.parse(getMain(data)).rows, grid); // populates grid
endGridRequest(tblName); // hides the loading panel
}
},
error: function(data, textStatus) {
alert(textStatus);
alert('An error has occured retrieving data!');
}
},
editurl: "WebService.asmx/ModifyFileLog",
serializeEditData: function(postData) {
return JSON.stringify(postData);
},
recreateForm: true,
pager: pager1,
...
}); // end .jqGrid()
grid.jqGrid('navGrid', pager1, { add: true, del: false, edit: true, view: false, refresh: true, search: false },
{}, // use default settings for edit
{
//beforeSubmit: submitAddFileLog,
closeAfterAdd: false,
closeAfterEdit: true
}, // use default settings for add
{}, // delete instead that del:false we need this
{multipleSearch: false }, // enable the advanced searching
{closeOnEscape: true} /* allow the view dialog to be closed when user press ESC key*/
); // end grid/jqGrid('navGrid')
ПРИМЕЧАНИЕ: я начал заполнять, используя $.ajax()
с помощью datatype: function(data)
, но подумал, что вернусь к простейшему примеру, чтобы заставить это работать. Если вы хотите высказать свои соображения о преимуществах использования $.ajax()
по сравнению с простым использованием grid.jqGrid({ url: blah });
, я хотел бы узнать больше. В противном случае, пожалуйста, дайте мне знать, будет ли уместнее опубликовать его как отдельный вопрос.
Кроме того, пожалуйста, дайте мне знать, если я просто сделаю это неправильно. Я не привязан ни к какому способу сделать это. Я предпочел бы быть неправым и научиться делать это правильно, чем быть «правильным» в своем собственном уме и продолжать взламывать мой путь через это.
Любая помощь, наряду с примерами, будет очень признательна.