Como jsonify "Adicionar" postagem / parâmetros para jqGrid
Este está me matando. Eu já li váriasOlegdos comentários dedocumentação, mas acho que estou ignorando algorealmente simples.
Eu tenho um jqGrid preenchido chamando um método da web que retorna JSON. Nós somos bons lá. Estou usando o Navegador para o meu botão "Adicionar" e usandoonSelectRow
W/jqGrid.editRow()
para minha edição.
Recebo a caixa de diálogo ao clicar no botão "Adicionar" e posso preencher tudo. No entanto, recebo umaerror Status: 'Internal Server Error'. Error code: 500
retorne a mensagem depois de clicar no botão Enviar. Usando o Firebug, oResponse
é{"Message":"Invalid JSON primitive: FileType.","StackTrace":....
. e aPost
éFileType=3&ExportDate=12%2F29%2F2010&oper=add&id=_empty
.
Obviamente, meu post não está sendo "jsonificado". Eu tentei usarserializeEditData
ebeforeSubmit
na tentativa de retornar manualmenteJSON.stringify(eparams);
, mas nada funcionou. Por favor, veja meu código abaixo.
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')
NOTA: Comecei a preencher usando$.ajax()
por meio dedatatype: function(data)
, mas pensei em retornar ao exemplo mais simples para que isso funcionasse. Se você se interessa em pensar sobre as vantagens de usar$.ajax()
simplesmente usandogrid.jqGrid({ url: blah });
, Adoraria aprender mais. Caso contrário, informe-me se seria mais apropriado publicá-lo como uma pergunta separada.
Além disso, deixe-me saber se estou fazendo isso da maneira errada. Não estou preso a nenhuma maneira de fazer isso. Eu preferiria estar errado e aprender como fazer isso da maneira certa, do que estar "certo" em minha própria mente e continuar a abrir caminho.
Qualquer ajuda, juntamente com exemplos, seria imensamente apreciada.