【问题标题】:Kendo UI grid update剑道 UI 网格更新
【发布时间】:2014-09-08 22:41:18
【问题描述】:

我正在使用带有服务的 Kendo UI 网格,该服务需要 POST 请求将行更新为 JSON 字符串而不是 URL 编码形式。

我的网格数据源配置如下:

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"})(它是什么编码,顺便说一句?)加上表单数据。

直接使用 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 发布正确的数据?

【问题讨论】:

  • 关于最后一句话:根据文档,我应该可以将 update 设置为一个函数并调用它,但显然这自 2012 年以来就不起作用了。 @ 987654323@,您必须对所有 CRUD 方法(URL 或方法)使用一致的定义,但不能混合使用它们。
  • 我已经尝试实现读取和更新以及创建和删除的空函数,并且在开始时不调用读取。调用读取、创建和删除的默认函数是什么?
  • 它正在工作。请将其发布为答案以将其标记为已解决。我仍然想看看每个操作的默认功能是什么。

标签: jquery kendo-ui


【解决方案1】:

它不直观或文档不完整,但您想在 parameterMap 函数中调用 JSON.stringify()

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" }
            }
        }
    }
});

【讨论】:

  • 谢谢,这也有效,而且比重新定义所有 CRUD 函数更容易。
【解决方案2】:

尝试使用

JSON.stringify(data);

【讨论】:

  • 这不起作用,Kendo 仍然对数据进行编码。如果浏览器支持,kendo.stringify 会重用 JSON.stringify。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多