2013-02-06 53 views
0

ByVal datax As ObjectI'm嘗試使用ASP.NET和webmethod檢索數據併爲jqgrid保存數據。 我可以從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 

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

它仍然沒有工作=(

+0

你看到AJAX呼叫出去了嗎?它是否包含發佈數據? – Mark

+0

對不起,我是jquery的新手,我如何檢查AJAX調用是否結束? – user2045340

+0

是的,我已經檢查了螢火蟲和AJAX電話出去,但我得到了這個錯誤信息: – user2045340

回答

0

我不建議你使用datatype定義爲函數,特別是如果你只是jQuery.ajax與服務器通信。jqGrid提供了很多方法來定製數據它將被髮送到服務器(例如,請參閱serializeGridData callback和ajaxGridOptions jqGrid選項),並在服務器響應將由jqGrid處理之前更改服務器響應(例如,beforeProcessing回調)。當前的代碼使用addRowData填充數據。這是填補我知道的網格最慢的方法。此外,您可以在每次加載數據時調用navGrid,而不是在創建網格後直接調用它。所有其他呼叫將被忽略。你可以找到很多例子,說明如何使用web服務和jqGrid一起使用。以the answer爲例

您當前的代碼混合了jQuery.ajaxthe options of jqGrid的選項。您將jqGrid的editurl選項放入$.ajax選項列表中。

另一個更重要的錯誤是在updatedb方法中使用正確的變量名稱。您目前使用datax As Object而不是使用customeridcustomername作爲參數。

+0

感謝oleg的評論,我已經通過匹配解決了問題參數的名稱「公共共享功能updatedb」來自網站的響應。 – user2045340

+0

ajax get是壞的我知道,我現在嘗試使用url + serializegriddata + jsonreader ...但沒有運氣,請繼續嘗試。 – user2045340

+0

@ user2045340:不客氣!仔細查看[答案](http://stackoverflow.com/a/6296601/315935)的代碼。我想它會告訴你如何將'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」,記錄:「d.records」},loadonce:true'。它應該用來填充網格。 – Oleg