2014-07-17 241 views
4

我正在使用Kendo UI網格,該服務需要將POST請求更新爲JSON字符串而不是URL編碼形式。Kendo UI網格更新

我的網格數據源配置看起來像這樣:

dataSource: new kendo.data.DataSource({ 
    transport: { 
     read: "/Service.svc/instructors", 
     update: { 
      url: "/Service.svc/instructors", 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      data: function (data) { 
       return kendo.stringify(data); 
      } 
     } 
    }, 
    //... 
}); 

然而的請求主體最終看起來像這樣:

0=%7B&1=%22&2=I&3=d&4=%22&5=:&6=%20&7=1&8=,&9=%20&10=%22&11=F&12=o&13=o&14=%22&15=:&16=%20&17=%22&18=f&19=o&20=o&21=%22&22=,&23=%20&24=%22&25=B&26=a&27=r&28=%22&29=:&30=%20&31=%22&32=b&33=a&34=r&35=%22&36=%7D&Id=1&Foo=foo&Bar=bar 

一種編碼JSON對象({"Id": 1, "Foo": "foo", "Bar": "bar"})(什麼編碼是, btw?)加上表格數據。

直接用jQuery做它工作得很好:

$.ajax({ 
    type: "POST", 
    url: "/Service.svc/instructors", 
    data: kendo.stringify({Id: 1, Foo: "foo", Bar: "bar"}), 
    contentType:"application/json; charset=utf-8", 
    dataType: "json", 
    success: function(data) { console.log(data);} 
}); 

按照documentation,我應該能夠設置更新的功能和調用,但顯然這hasn't work since 2012

我該如何讓Kendo發佈正確的數據?

+0

至於最後一句:_According的文檔,我應該是能夠將更新設置爲函數並調用該函數,但顯然這從2012年開始無法使用。[[已記錄]](http://www.telerik.com/forums/data-source-with-transport-read-函數與本地數組表現出不同於使用Web服務數據的行爲)對所有CRUD方法使用一致的定義,無論是URL還是方法,但不能混合使用。 – OnaBai

+0

我已經嘗試實現讀取和更新以及用於創建和刪除的空函數,並且讀取在啓動時不會被調用。調用讀取,創建和刪除的默認函數是什麼? – user3557327

+0

現在正在工作。請將其作爲回答標記爲已解決。我仍然想看看每個動作的默認功能是什麼。 – user3557327

回答

7

它不直觀,或者有據可查的,但你要調用JSON.stringify()parameterMap功能嘗試:

var productsDataSource = new kendo.data.DataSource({ 
    transport: { 
     read: { 
      url: "/Products" 
     }, 
     update: { 
      type: "POST", 
      url: "/Products/Edit", 
      dataType: "json", 
      contentType: "application/json" 
     }, 
     parameterMap: function(data, operation) { 
      if (operation === "update" || operation === "create") { 
       return JSON.stringify({product: data}); 
      } 
      return data; 
     } 
    }, 
    schema: { 
     model: { 
      id: "ProductID", 
      fields: { 
       Name: { type: "string" }, 
       ListPrice: { type: "number" }, 
       SellStartDate: { type: "date" } 
      } 
     } 
    } 
}); 
+0

謝謝,這也可以工作,比重新定義所有的CRUD功能更容易。 – user3557327

0

使用

JSON.stringify(data); 
+0

這不起作用,Kendo仍然編碼數據。如果瀏覽器支持,kendo.stringify會重用JSON.stringify。 – user3557327