我的Kendo Grid设置如下。该url用于下面的代码片段,它是一个ASP.NET Web Api。当我在网格上使用“添加新记录”并按下更新时,按预期调用Post方法,并且musics参数按预期存在,但是它是空的。换句话说,stringify方法没有任何字符串化。为什么绑定没有发生?
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 :(得分: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;
}
为什么这么难,我不知道,但感谢Burke Holland。 http://blogs.telerik.com/kendoui/posts/11-11-07/batch_crud_operations_with_kendo_ui_datasource
答案 1 :(得分: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:function()以名称模型的序列化格式发送数据,因此您应该在操作中使用模型作为参数名称
您也可以参考此post