2011-06-14 41 views
1

我有以下簽名支持AJAX的WCF服務:修改的jqGrid的POSTDATA以支持AJAX的WCF服務

 [OperationContract] 
     [WebGet] 
     public JQGridContract GetJQGrid(int entityIndex) 

,後面的數據合同:

[DataContract] 
public class JQGridContract 
{ 
    [DataContract] 
    public class Row 
    { 
     [DataMember] 
     public int id { get; set; } 

     [DataMember] 
     public List<string> cell { get; set; } 

     public Row() 
     { 
      cell = new List<string>(); 
     } 
    } 

    [DataMember] 
    public int page { get; set; } 

    [DataMember] 
    public int total { get; set; } 

    [DataMember] 
    public int records { get; set; } 

    [DataMember] 
    public List<Row> rows { get; set; } 

    public JQGridContract() 
    { 
     rows = new List<Row>(); 
    } 
} 

基本上我需要更改客戶端jqGrid的postData以將'entityIndex'發送到此服務。

我讀過如何它應該發揮作用,從我可以告訴這應該工作:

function loadGrid() { 

    $("#jqGrid").jqGrid({ 

     postData: { entityIndex : function() { // modify the data posted to AJAX call here 

      return 6; 

      }) 
     }, 
     gridComplete: function() { 

      $("#jqGrid").setGridParam({ datatype: 'local' }); 
     }, 
     datatype: function (pdata) { 
      getData(pdata); 
     }, 

這裏是的getData()函數:

function getData(pdata) { 

    var params = new Object(); 

    alert(pdata.entityIndex());    // this displays '6', correctly 

    params.entityIndex = pdata.entityIndex(); 


    $.ajax(
      { 
       type: "GET", 
       contentType: "application/json; charset=utf-8", 
       url: "AJAXService.svc/GetJQGrid", 
       data: JSON.stringify(params), 
       dataType: "json", 
       success: function (data, textStatus) { 
        if (textStatus == "success") { 
         var thegrid = $("#jqGrid")[0]; 

         thegrid.addJSONData(data.d); 
        } 
       }, 
       error: function (data, textStatus) { 
        alert('An error has occured retrieving data!'); 
       } 
      }); 

伊夫證實以下在螢火蟲:

1)JSON PARAMS是正確的:{ 「entityIndex」:6}

2)AJAX服務返回JSON數據到網格,它只是錯誤的數據

這裏是怪異的一部分:

我登錄了「entityIndex」這就是真正的WCF操作容器內工作 - 和它的總是成爲0?

謝謝。

回答

1

我不會批評你的程序的風格。我可以寫很多關於這個的東西。 :-)

您目前的主要問題可能與使用的JSON.stringify(params)或與該WFC方法的另一個BodyStyle使用JSON.stringify(pdata.entityIndex())而不是被解決(見here瞭解詳細信息)

+0

是在WCF側或JS側的風格問題?我很快就把它們扔在一起,試圖理解基礎知識。最終,我會希望jqGrid postData基於url的queryString中的任何內容。 – 2011-06-14 19:01:50

+0

這些選項都不起作用。首先調用pdata.entityIndex()只返回6,而不是{「entityIndex」:6}。如果我改變它返回{「entityIndex」:6}我回到了我開始的地方。就像我說過的,我在螢火蟲中檢查了'params'選項卡,它顯示:{「entityIndex」:6}。無論WCF操作上的BodyStyle如何,傳遞給該方法的實際值始終爲0. – 2011-06-14 19:26:58

+0

@Sean:如果您發佈演示項目的URL,我可以嘗試找出爲什麼我的建議不適合您。關於風格我只是指客戶端部分。我發現'datatype'的用法是錯誤的。看一個[老答案](http://stackoverflow.com/questions/3912008/jqgrid-does-not-populate-with-data/3914796#3914796)你可以在哪裏下載完整的[演示項目](http:///www.ok-soft-gmbh.com/jqGrid/WfcToJqGrid.zip)。實現分頁,排序和過濾你會發現[這裏](http:// stackoverflow。com/questions/5500805/asp-net-mvc-2-0-implementation-of-searching-in-jqgrid/5501644#5501644) – Oleg 2011-06-14 19:42:53

0

我得到它的工作,它靠近Oleg說,只是你不需要做JSON.stringify。

如果你有WebMessageBodyStyle.WrappedRequest,這個工程:

data: { entityIndex: pdata.entityIndex() }, 

或者如果你有沒有BodyStyle,這個工程:

data: { "entityIndex": pdata.entityIndex() }, 
+0

我假設你在web.config中配置了輸入和輸出數據的JSON格式。 – Oleg 2011-06-14 19:46:47