jqGrid, ASP.NET, JSON is Driving me crazy. Please Help

I’ve been trying to get this to work for days upon days and it seems like one thing after another. Initially, I finally tracked it down to trouble passing ASP.NET dates in the JSON string back to the grid. I am now using JSON.NET and the dates are coming back the way they should be I’m stuck right back where I alwasy seem to be. Here is my code, returned json string, and jqGrid code also: (I’m sorry it’s so long, but I just didn’t want to leave anything out in case that was the part that was screwing me up)! Basically, I am continually stuck in the success method of the ajax call where I try to addJSONData…. as of right now I am getting an error from Firebug that says:
invalid property id
({total:1,page:1,records:5,[{“ROWID”:1,”…rName”:”BCC”,”SubmitterID”:”BCC4010″,”Su

ANY HELP WOULD BE SO GREATLY APPRECIATED! I Want to use this plug in so much, but I am going absolutely nuts trying to make it work!


Thanks in Advance, Briana 🙂

WebMethod:
<WebMethod()> _
    <Script.Services.ScriptMethod(UseHttpGet:=False, ResponseFormat:=ResponseFormat.Json)> _
    Public Function GetTableData() As String
        Dim objController As New TradingPartnersController
        Dim gv_page As String = String.Empty
        Dim sidx As String = String.Empty
        Dim sord As String = String.Empty
        Dim start As String = String.Empty
        Dim limit As String = String.Empty
        Dim row As String = String.Empty
        Dim header As String = String.Empty
        Dim count As Integer = 0
        Dim total_pages As Integer = 0

        gv_page = HttpContext.Current.Request.Form("page")  '.Form("page")
        ' get the requested page 
        limit = HttpContext.Current.Request.Form("rows")
        ' get how many rows we want to have into the grid 
        sidx = HttpContext.Current.Request.Form("sidx")
        ' get index row - i.e. user click to sort 
        sord = HttpContext.Current.Request.Form("sord")
        ' get the direction 
        If String.IsNullOrEmpty(sidx) Then
            sidx = "PartnerID"

        End If

        If String.IsNullOrEmpty(sord) Then
            sord = "ASC"

        End If

        If String.IsNullOrEmpty(limit) Then
            limit = 10

        End If

        '' connect to the database 
        'GridView1.DataSource = objController.ListAll()
        'GridView1.DataBind()

        Dim objCollection As List(Of TradingPartnersInfo) = objController.ListAll()
        count = objCollection.Count

        If count > 0 Then
            total_pages = Math.Ceiling(count / Int32.Parse(limit))
        Else
            total_pages = 0
        End If

        If gv_page Is Nothing Then
            gv_page = 1
        End If
        If Not gv_page > total_pages Then
            gv_page = total_pages
        End If

        start = Math.Ceiling(Int32.Parse(limit) * (Int32.Parse(gv_page) - Int32.Parse(limit)))
        If start < 1 Then start = 1
        Dim objPageCollection As List(Of TradingPartnersInfo) = objController.ListTradingPartners(sidx, sord, Int32.Parse(start), Int32.Parse(limit))
        Dim json As New StringBuilder
        json.Append("{")
        json.Append("total:" & total_pages.ToString & ",")
        json.Append("page:" & gv_page.ToString & ",")
        json.Append("records:" & count.ToString & ",")
        json.Append(JsonConvert.SerializeObject(objPageCollection))
        json.Append("}")
        Return json.ToString

    End Function


Here is the jqGrid code:  


jQuery('table.scroll').jqGrid({  
    jsonReader: {  
        root: "rows", //arry containing actual data  
        page: "page", //current page  
        total: "total", //total pages for the query  
        records: "records", //total number of records  
        repeatitems: false,  
        id: "ID" //index of the column with the PK in it   
    },  
    datatype: function(postdata) {  
        jQuery.jmsajax({  
            type: "POST",  
            url: "EDI.asmx",  
            method: "GetTableData",  
            dataType: "msjson",  
            data: {},  
            complete: function(data) {  
                var mygrid = jQuery('table.scroll')[0];  
                var result = (eval("(" + data.responseText + ")"));  
                var myjsongrid = (jeval(result.d));  
                alert(myjsongrid.rows);  
                mygrid.addJSONData(jeval(myjsongrid.rows));  //This is ERROR LINE

                myjsongrid = null;  
                myjsongridParsed = null;  
                result = null;  
            },  
            success: function(data) {  
                alert('success: ' + data);  
            },  
            error: function(xhr) {  
                var res = xhr.responseText;  
                alert(res);  
            }  
        });  
    },  
    colNames: [
                    "ROWID",
                    "ID",
                    "PartnerID",
                        "Direction",
                        "InterchangeVersion",
                        "InterchangeSenderID",
                        "InterchangeReceiverID",
                        "ProductionMode",
                        "SubmitterName",
                        "SubmitterID",
                        "SubmitterPOC",
                        "CommQual",
                        "CommNumber",
                        "ReceiverName",
                        "ReceiverID",
                        "PartnerType",
                        "PartnerNotes",
                        "IncomingSP",
                        "OutgoingSP",
                        "ExchangeAck",
                        "isDeleted",
                        "DateTimeInserted",
                        "KeyID"
                    ],

    colModel: [
                { name: "ROWID",
                    width: 1,
                    hidden: true,
                    key: false,
                    sorttype: 'int',
                    editrules: { searchhidden: false,
                        hidedlg: true,
                        index: 'ROWID',
                        jsonmap: 'ROWID'
                    }
                },

                { name: "ID",
                    width: 1,
                    hidden: true,
                    key: true,
                    sorttype: 'int',
                    editrules: { searchhidden: true,
                        hidedlg: false,
                        index: 'ID',
                        jsonmap: 'ID'
                    }
                },

                { name: "PartnerID",
                    width: 50,
                    resizable: true,
                    sortable: true,
                    sorttype: 'text',
                    editable: true,
                    edittype: 'text',
                    editrules: { required: true,
                        index: 'PartnerID',
                        jsonmap: 'PartnerID',
                        label: 'PartnerID',
                        resizable: true,
                        search: true
                    }
                },
                    { name: "Direction",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'select',
                        editoptions: { value: "I:O" },
                        editrules: { required: true,
                            index: 'Direction',
                            jsonmap: 'Direction',
                            label: 'Direction',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "InterchangeVersion",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'select',
                        editoptions: { value: "004010X098A1:004010X097A1:004010X096A1:004010X098A:004010X097A:004010X096A" },
                        editrules: { required: true,
                            index: 'InterchangeVersion',
                            jsonmap: 'InterchangeVersion',
                            label: 'InterchangeVersion',
                            resizable: true, search: true
                        }
                    },

                    { name: "InterchangeSenderID",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'text',
                        editrules: { required: true,
                            index: 'InterchangeSenderID',
                            jsonmap: 'InterchangeSenderID',
                            label: 'InterchangeSenderID',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "InterchangeReceiverID",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'text',
                        editrules: { required: true,
                            index: 'InterchangeReceiverID',
                            jsonmap: 'InterchangeReceiverID',
                            label: 'InterchangeReceiverID',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "ProductionMode",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'select',
                        editoptions: { value: "T:P" },
                        editrules: { required: true,
                            index: 'ProductionMode',
                            jsonmap: 'ProductionMode',
                            label: 'ProductionMode',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "SubmitterName",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'text',
                        editrules: { required: true,
                            index: 'SubmitterName',
                            jsonmap: 'SubmitterName',
                            label: 'SubmitterName',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "SubmitterID",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'text',
                        editrules: { required: true,
                            index: 'SubmitterID',
                            jsonmap: 'SubmitterID',
                            label: 'SubmitterID',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "SubmitterPOC",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'text',
                        editrules: { required: true,
                            index: 'SubmitterPOC',
                            jsonmap: 'SubmitterPOC',
                            label: 'SubmitterPOC',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "CommQual",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: "select",
                        editoptions: { value: "ED:EM:FX:TE" },
                        editrules: { required: false,
                            index: 'CommQual',
                            jsonmap: 'CommQual',
                            label: 'CommQual',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "CommNumber",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'text',
                        editrules: { required: false,
                            index: 'CommNumber',
                            jsonmap: 'CommNumber',
                            label: 'CommNumber',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "ReceiverName",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'text',
                        editrules: { required: true,
                            index: 'ReceiverName',
                            jsonmap: 'ReceiverName',
                            label: 'ReceiverName',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "ReceiverID",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'text',
                        editrules: { required: true,
                            index: 'ReceiverID',
                            jsonmap: 'ReceiverID',
                            label: 'ReceiverID',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "PartnerType",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: "select",
                        editoptions: { value: "Clearinghouse:PPO:Both" },
                        editrules: { required: true,
                            index: 'PartnerType',
                            jsonmap: 'PartnerType',
                            label: 'PartnerType',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "PartnerNotes",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'textarea',
                        editrules: { required: false,
                            index: 'PartnerNotes',
                            jsonmap: 'PartnerNotes',
                            label: 'PartnerNotes',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "IncomingDataPrepSP",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'text',
                        editrules: { required: false,
                            index: 'IncomingDataPrepSP',
                            jsonmap: 'IncomingDataPrepSP',
                            label: 'IncomingDataPrepSP',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "OutgoingDataPrepSP",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: 'text',
                        editrules: { required: false,
                            index: 'OugoingDataPrepSP',
                            jsonmap: 'OugoingDataPrepSP',
                            label: 'OutgoingDataPrepSP',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "ExchangeAck",
                        width: 50,
                        resizable: true,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: "select",
                        editoptions: { value: "True:False" },
                        editrules: { required: true,
                            index: 'ExchangeAck',
                            jsonmap: 'ExchangeAck',
                            label: 'ExchangeAck',
                            resizable: true,
                            search: true
                        }
                    },

                    { name: "isDeleted",
                        width: 5,
                        resizable: false,
                        sortable: true,
                        sorttype: 'text',
                        editable: true,
                        edittype: "select",
                        editoptions: { value: "Yes:No" },
                        editrules: { required: true,
                            index: 'isDeleted',
                            jsonmap: 'msg.d.isDeleted',
                            label: 'isDeleted',
                            resizable: true,
                            search: true
                        }
                    },

                      { name: "DateTimeInserted",
                          width: 20,
                          hidden: false,
                          datefmt: 'Y-m-d',
                          sorttype: 'date',
                          editable: false,
                          editrules: { index: 'DateTimeInserted',
                              jsonmap: 'DateTimeInserted',
                              label: 'DateTimeInserted',
                              resizable: true,
                              search: true
                          }
                      },

                    { name: "KeyID",
                        width: 5,
                        hidden: true,
                        key: false,
                        sorttype: 'int',
                        editrules: { index: 'KeyID',
                            jsonmap: 'KeyID',
                            hidedlg: true,
                            label: 'KeyID',
                            resizable: false,
                            search: false
                        }
                    }
                ],
    height: 400,
    shrinkToFit: true,
    pager: jQuery('#pager'),
    rowNum: 10,
    rowList: [10, 20, 30, 40, 50],
    sortname: 'ROWID',
    sortorder: "asc",
    viewrecords: true,
    imgpath: 'http://localhost/DNN5/js/jQuery/jqGrid-3.4.3/themes/sand/images',
    caption: 'X12 Trading Partners',
    viewrecords: true,
    gridComplete: function() {
        alert("i'm grid complete" + JSON.stringify(msg));
        //updates the new column order position
        $('table.scroll').tableDnDUpdate();
    }}).navGrid('table.scroll', { edit: true, add: true, del: true }).tableDnD();

Here is the Returned JSON String: (I have no problem seeing this data being returned to client.)

success:

{total:1,page:1,records:5,[{"ROWID":1,"ID":1,"PartnerID":"BCN","Direction":"I","InterchangeVersion":"004010X096A1","InterchangeSenderID":"BCC4010","InterchangeReceiverID":"company","ProductionMode":"T","SubmitterName":"BCC","SubmitterID":"BCC4010","SubmitterPOC":"BCC","CommQual":"","CommNumber":"","ReceiverName":"company","ReceiverID":"BCC4010","PartnerTypes":"","PartnerNotes":"","IncomingDataPrepSP":"","OutgoingDataPrepSP":"","ExchangeAck":false,"DateTimeInserted":new Date(1214412777787),"IsDeleted":false},{"ROWID":2,"ID":2,"PartnerID":"BCN","Direction":"I","InterchangeVersion":"004010X098A1","InterchangeSenderID":"BCC4010","InterchangeReceiverID":"company","ProductionMode":"T","SubmitterName":"BCC","SubmitterID":"BCC4010","SubmitterPOC":"BCC","CommQual":"","CommNumber":"","ReceiverName":"company","ReceiverID":"BCC4010","PartnerTypes":"","PartnerNotes":"","IncomingDataPrepSP":"","OutgoingDataPrepSP":"","ExchangeAck":false,"DateTimeInserted":new Date(1212088125000),"IsDeleted":false},{"ROWID":3,"ID":3,"PartnerID":"BCN","Direction":"O","InterchangeVersion":"004010X091A1","InterchangeSenderID":"HCA770385729","InterchangeReceiverID":"BCC47198       ","ProductionMode":"T","SubmitterName":"company Administrators","SubmitterID":"HCA770385729","SubmitterPOC":"briana","CommQual":"EM","CommNumber":"<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9dffeff4fcf3fcddfef2f0edfcf3e4b3fef2f0">[email protected]</a>","ReceiverName":"BCN","ReceiverID":"BCC47198","PartnerTypes":"","PartnerNotes":"","IncomingDataPrepSP":"","OutgoingDataPrepSP":"","ExchangeAck":false,"DateTimeInserted":new Date(1212088125547),"IsDeleted":false},{"ROWID":4,"ID":4,"PartnerID":"EHG","Direction":"I","InterchangeVersion":"004010X097A1","InterchangeSenderID":"330989922","InterchangeReceiverID":"company","ProductionMode":"T","SubmitterName":"DENTALCONNECT","SubmitterID":"330989922","SubmitterPOC":"","CommQual":"","CommNumber":"","ReceiverName":"","ReceiverID":"","PartnerTypes":"Clearinghouse","PartnerNotes":"Dental clearinghouse.  Sends billing address in the pay-to segment (NM1*87) and the service address in the billing segment (NM1*85).","IncomingDataPrepSP":"[dispatch].spPreprocessEHG","OutgoingDataPrepSP":"","ExchangeAck":true,"DateTimeInserted":new Date(1235603192033),"IsDeleted":false},{"ROWID":5,"ID":5,"PartnerID":"EMDEON","Direction":"I","InterchangeVersion":"004010X097A1","InterchangeSenderID":"341884003","InterchangeReceiverID":"857297703","ProductionMode":"T","SubmitterName":"INTERACTIVE PAYER NETWORK","SubmitterID":"341884003","SubmitterPOC":"","CommQual":"","CommNumber":"","ReceiverName":"","ReceiverID":"","PartnerTypes":"Clearinghouse","PartnerNotes":"Dental clearinghouse.  Sends billing address in the pay-to segment (NM1*87) and the service address in the billing segment (NM1*85).","IncomingDataPrepSP":"","OutgoingDataPrepSP":"","ExchangeAck":true,"DateTimeInserted":new Date(1235603192000),"IsDeleted":false}]}

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Actually, tvanfosson makes an excellent point with the requirement of the ‘rows’ identifier. I’m unfamiliar with jMSAjax so my comments may be null and void. I’m glad to be aware of it.


Could it be something as simple as the return type being string? That is, when the response is evaluated, you end up with the encapsulated string not the json object.

I’ve been in a similar place myself. I found the options to be either, create a business object that represents the expected jqGrid response and return the object not a string (ASP.NET will serialize it as JSON for you!) or modify the jqGrid to eval the response twice (messy).

Method 2

missing an identifier for that list:

return_value = {
    total:1,
    page:1,
    records:5,
    [{  .. some X12 messages  ..}]
}

Method 3

I have spent a lot of time trying to get jqGrid to work with ASP.NET using JSON. Now that I have it working, I would like to share it with you. Hoping to save time for other people.

I found the answer here. This is not to say there are no other ways to make this work (I’m sure there are). But this one definitely works.

To summarize the things that made a difference for me:

  • Using “datatype: function() {” on the settings of the jqGrid, and NOT using “datatype: json”. The function uses “$.ajax(” to call the service. Looking in Fiddler, this changed the data coming back to the browser, to be pure JSON (instead of JSON wrapped in XML).
  • Using a web service that returns a
    data class (in the schema jqGrid
    expects). I first tried using JSON.NET
    but for some reason the message
    showed (in Fiddler again) to be
    escaped with for every quote in the
    string. I’m pretty sure you can get
    JSON.NET to work. But it works just
    as well without it.

Method 4

It doesn’t look like you are adding the rows property identifier. Try changing:

json.Append(JsonConvert.SerializeObject(objPageCollection))

to
json.Append("rows: " + JsonConvert.SerializeObject(objPageCollection))

If this doesn’t work, I suggest that you simplify the problem — reduce the data to one row, for example — and see if you can get it working with simpler data, then gradually add more stuff back into it.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x