【问题标题】:jqgrid webmethod : failed to save rowjqgrid webmethod:保存行失败
【发布时间】:2013-02-06 03:11:27
【问题描述】:

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

还是不行=(

【问题讨论】:

  • 你看到 AJAX 调用出去了吗?它是否包含帖子数据?
  • 对不起,我是 jquery 的新手,如何检查 AJAX 调用是否消失?
  • 是的,我已经用 firebug 进行了检查,并且 AJAX 调用消失了,但是我收到了以下错误消息:
  • "无效的 Web 服务调用,参数缺失值"

标签: asp.net ajax jqgrid webmethod


【解决方案1】:

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

您当前的代码混合了jQuery.ajaxthe options of jqGrid 的选项。您将 jqGrid 的 editurl 选项放入了 $.ajax 的选项列表中。

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

【讨论】:

  • 感谢 oleg 的评论,我通过将“Public Shared Function updatedb”的参数名称与来自网络的响应相匹配,以某种方式解决了问题。
  • 我知道 ajax get 很糟糕,我现在正在尝试使用 url + serializegriddata + jsonreader ...但没有运气,继续尝试..
  • @user2045340:不客气!再仔细看the answer的代码。我认为它向您展示了如何将datatype 作为函数替换为datatype: "json"。在您的情况下,您可以尝试修改您的 JavaScript 代码以使用 datatype: 'json', mtype: "POST", ajaxGridOptions: { contentType: "application/json"}, serializeGridData: function (postData) { return JSON.stringify(dataToSend); }, jsonReader: { root: "d.rows", page: "d.page", total: "d.total", records: "d.records" }, loadonce: true。它应该可以填充网格。
猜你喜欢
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多