Kendo Grid - 使用parameterMap不绑定新Item

时间:2014-03-25 20:19:30

标签: kendo-ui kendo-grid

我的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确实有我在网格中输入的新项目。

2 个答案:

答案 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