2014-03-25 52 views
2

我有一個Kendo Grid設置如下。該網址適用於下面的代碼片段,它是一個ASP.NET Web Api。當我在網格上使用「添加新記錄」並按Update時,Post方法按預期調用,並且音樂參數按預期方式存在,但是它是空的。換句話說,stringify方法沒有任何可串聯的東西。爲什麼綁定不會發生?Kendo Grid - 不綁定一個使用parameterMap的新項目

dataSource = new kendo.data.DataSource({ 
    transport: { 
... 
     create: { 
      url: "/api/mywebapi/", 
      type: "POST" 
     }, 
     parameterMap: function (data, operation) { 
      if (operation !== "read" && data.models) { 
       return { models: kendo.stringify(data.models) }; 
      } 
      return { models: kendo.stringify(data) }; 
     } 

...

在Web API方法:

public HttpResponseMessage Post(IEnumerable<MusicVM> musics) 
    { 
     ... 
    } 

我應該說,在調試我可以看到操作是 「創建」,而data.models確實有我在網格中輸入的新項目。

回答

0

而不是使用

public HttpResponseMessage Post(IEnumerable<MusicVM> musics) 
    { 
     ... 
    } 

使用

public JsonResult Post(string models) 
{ 
//Deserialize string to object 
IList<MusicVM> musics= new JavaScriptSerializer().Deserialize<IList<MusicVM>>(models); 

return Json(musics) 
} 

注意parameterMap的的:在序列化格式()函數發送數據與名稱型號,所以你應該在你的動作使用模式作爲參數名

你可以參考這個post以及

+0

我明白你在說什麼,但也許我應該更清楚。我沒有使用Json方法駐留的MVC控制器基類,而是使用API​​ Api的ApiController。我有數據庫訪問的Web API。只是在那裏創建和更新方法被調用,但是有一個空對象。我可以清楚地看到data.models正在通過parameterMap進行字符串化,它只是不會傳遞給Post。 – Scott

1

最後,經過多年的鬥爭,我偶然發現了一些可行的方法。我改變了parameterMap爲:

 parameterMap: function (data, operation) { 
      if (operation !== "read" && data.models) { 

       var items = {}; 
       $.each(data.models, function (index, item) { 
        for (var key in item) { 
         items["[" + index + "]" + "." + key] = item[key]; 
        } 
       }); 

       return items; 
      } 

爲什麼這是如此困難,我不知道,但多虧了伯克荷蘭這個。 http://blogs.telerik.com/kendoui/posts/11-11-07/batch_crud_operations_with_kendo_ui_datasource