ByVal datax As ObjectI尝试将ASP.NET与webmethod一起使用来检索数据并保存jqgrid的数据。 我可以从web方法中检索数据,但没有运气来保存。 服务器端似乎永远不会得到我的帖子数据。有人请帮忙吗?
网格代码:
$('#list99').jqGrid({
datatype: function(postdata) {
$.ajax({
url: 'dbtest.aspx/getdata',
editurl: 'dbtest.aspx/updatedb',
type: 'POST',
data: '{}',
dataType: "json",
contentType: "application/json; charset=utf-8",
error: function(data, textStatus) {
alert('Error loading json');
},
success: function(data, st) {
if (st == 'success') {
var grid = $("#list99");
var gridData = JSON.parse(data.d);
grid.clearGridData();
for (var i = 0; i < gridData.length; i++) {
grid.addRowData(i + 1, gridData[i]);
}
}
$("#list99").jqGrid('navGrid', '#pager99', { add: true, edit: true, del: true });
}
});
},
type: 'POST',
editurl: 'dbtest.aspx/updatedb',
colNames: ['customerid', 'customername'],
colModel: [
{ name: 'customerid', index: 'customerid', width: 80, align: 'left', editable: true, edittype: 'text' },
{ name: 'customername', index: 'customername', width: 120, align: 'left', editable: true, edittype: 'text'}],
pager: $('#pager99'),
rowNum: 5,
rowList: [10],
sortname: 'customerid',
sortorder: 'desc',
viewrecords: true,
//width: 300
autowidth: true
});
服务器端代码:
Public Class customer
Public customerid As String
Public customername As String
End Class
<System.Web.Services.WebMethod()> _
Public Shared Function getdata() As String
Dim c1 As New customer
Dim c2 As New customer
c1.customerid = "1"
c1.customername = "pete"
c2.customerid = "2"
c2.customername = "joah"
Dim lstcustomer As New List(Of customer)
lstcustomer.Add(c1)
lstcustomer.Add(c2)
Dim jsonserial As New JavaScriptSerializer
Dim result As String
result = jsonserial.Serialize(lstcustomer)
Return result
End Function
<System.Web.Services.WebMethod()> _
Public Shared Function updatedb(ByVal datax As Object) As String
//attempt to do save
End Function
我点击了&#34; sumbit&#34;添加/编辑/删除后。
之后我用firebug检查了,我收到了错误消息:
"Invalid web service call, missing value for parameter: 'data'."
我还尝试添加以下内容:
jQuery.extend(jQuery.jgrid.edit, {
ajaxEditOptions: { contentType: "application/json" },
recreateForm: true,
serializeEditData: function(data) {
//alert('in2');
//alert(postData.customerid);
//alert(JSON.stringify(postData));
if (data.customerid == undefined) { data.customerid = null; }
var postData = { 'data': data };
//alert(postData.customerid);
return JSON.stringify(postData);
}
});
它仍然无法运作=(
答案 0 :(得分:0)
我不建议您使用datatype
定义为函数,特别是如果您只是jQuery.ajax
与服务器通信。 jqGrid提供了许多方法来自定义将发送到服务器的数据(例如,参见jqGrid的serializeGridData
回调和ajaxGridOptions
选项),并在jqGrid处理服务器响应之前更改服务器响应(例如beforeProcessing
回调)。当前代码使用addRowData
来填充数据。这是填充网格的最慢的方式,我知道。此外,您在每次加载数据时都会调用navGrid
,而不是在创建网格后直接调用它。所有其他电话将被忽略。您可以找到许多如何与jqGrid一起使用Web服务的示例。以the answer为例
您当前的代码将jQuery.ajax的选项与the options of jqGrid混合在一起。您将jqGrid的editurl
选项放入$.ajax
的选项列表中。
一个更重要的错误是在updatedb
方法中使用正确的变量名称。您目前使用datax As Object
代替使用customerid
和customername
作为参数。