这个要了我的命 我已经阅读了很多Oleg的评论和文档,但我认为我忽略了一些非常简单的东西。
我通过调用返回 JSON 的 web 方法填充了一个 jqGrid。我们在那里很好。我将导航器用于“添加”按钮,并使用onSelectRow
w/jqGrid.editRow()
进行编辑。
单击“添加”按钮时出现对话框,并且可以填写所有内容。但是,error Status: 'Internal Server Error'. Error code: 500
单击“提交”按钮后我收到一条返回消息。使用 Firebug,Response
是{"Message":"Invalid JSON primitive: FileType.","StackTrace":....
. 并且Post
是FileType=3&ExportDate=12%2F29%2F2010&oper=add&id=_empty
。
显然,我的帖子没有得到“jsonified”。我尝试使用serializeEditData
, 并beforeSubmit
尝试手动 return JSON.stringify(eparams);
,但没有任何效果。请在下面查看我的代码。
网络方法
<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 - 全局变量
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()
by来填充datatype: function(data)
,但我想我会回到最简单的例子来让它工作。$.ajax()
如果您愿意就 using比简单 using的优势提出您的想法grid.jqGrid({ url: blah });
,我很乐意了解更多信息。否则,请让我知道将其作为单独的问题发布是否更合适。
另外,如果我只是以错误的方式做这件事,请告诉我。我不拘泥于任何一种方法来完成这项工作。我宁愿犯错并学习如何以正确的方式做到这一点,而不是在自己的脑海中保持“正确”并继续破解我的方式。
任何帮助,连同示例,将不胜感激。