0

ByVal datax As Object我正在尝试使用 ASP.NET 和 webmethod 来检索数据并为 jqgrid 保存数据。我可以从 webmethod 检索数据,但没有运气来保存。服务器端似乎永远不会得到我的帖子数据。有人可以帮忙吗?

网格代码:

$('#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

在添加/编辑/删除后单击“sumbit”后,函数 updatedb 永远不会被调用。

之后我检查了萤火虫,我收到了错误消息:

"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);
            }
        });

还是不行=(

4

1 回答 1

0

我不建议您使用datatype定义为函数,特别是如果您只是jQuery.ajax为了与服务器通信。jqGrid 提供了许多方法来自定义将发送到服务器的数据(例如,参见jqGrid 的serializeGridData回调和ajaxGridOptions选项)并在 jqGrid 处理服务器响应之前更改服务器响应(beforeProcessing例如回调)。当前代码用于addRowData填充数据。据我所知,这是填充网格的最慢方法。此外,您调用navGrid每次加载数据,而不是在创建网格后直接调用一次。所有其他调用将被忽略。您可以找到许多如何将 Web 服务与 jqGrid 一起使用的示例。例如看答案

您当前的代码将jQuery.ajax选项与 jqGrid 的选项混合在一起。您将editurljqGrid 的选项放入$.ajax.

另一个重要的错误是在updatedb方法中使用了正确的变量名称。您使用当前datax As Object而不是使用customeridcustomername作为参数。

于 2013-02-06T09:53:26.133 回答