jqgrid webmethod:无法保存行

时间:2013-02-06 03:11:27

标签: asp.net ajax jqgrid webmethod

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

它仍然无法运作=(

1 个答案:

答案 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代替使用customeridcustomername作为参数。