0

ByVal datax As ObjectI は、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が呼び出されませんでした。

その後、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);
            }
        });

それでも機能しませんでした =(

4

1 に答える 1

0

特にサーバーと通信するためdatatypeだけに使用する場合は、関数として定義を使用することはお勧めしません。jQuery.ajaxjqGrid は、サーバーに送信されるデータをカスタマイズする多くの方法を提供し (serializeGridDataコールバックとajaxGridOptionsjqGrid のオプションを参照)、サーバーの応答が jqGrid によって処理される前にサーバーの応答を変更します (beforeProcessingコールバックなど)。addRowDataデータを埋めるために使用する現在のコード。私が知っているグリッドを埋める最も遅い方法です。さらにnavGrid、グリッドが作成された直後に一度呼び出すのではなく、データをロードするたびに呼び出します。他のすべての呼び出しは単に無視されます。jqGrid と一緒に Web サービスを使用する方法の多くの例を見つけることができます。たとえば、答えを見てください

現在のコードでは、 jQuery.ajax のオプションとjqGridのオプションが混在していますediturljqGrid のオプションを のオプションのリストに配置しました$.ajax

updatedbもう 1 つの重要なエラーは、メソッド内の変数の正しい名前の使用です。現在使用datax As Objectの代わりにパラメーターとして使用customeridcustomernameます。

于 2013-02-06T09:53:26.133 に答える