Kendo Grid CRUD操作无法在服务端持久化,Postman测试接口正常
问题排查与修复方案
以下是你当前代码与后端接口规则不匹配的所有问题,逐一修改即可解决:
- 第一,你开启了
batch: true批量提交模式,Kendo会将多条操作打包为数组发送到后端,而你Postman测试的是单条请求接口,后端未适配批量格式会无法解析参数,先关闭批量模式:将batch: true改为batch: false - 第二,DELETE请求未按后端要求将ID拼接在URL后缀,需要把destroy的url改为动态函数,拼接选中行的
idvatc值 - 第三,PUT/POST请求默认发送表单编码格式数据,你后端要求接收JSON格式参数,需要添加
contentType: "application/json"配置,同时通过parameterMap将请求参数序列化为JSON字符串 - 第四,检查字段名是否匹配:你代码中字段定义为
commen,如果后端实际接收的字段名是comment需要同步修正,否则会出现参数为空的情况
修改后的DataSource完整代码如下:
var commentDataSource = new kendo.data.DataSource({ //autoSync : true, transport: { read:{ url: "http://localhost:3000/api/comment", dataType: "json", type: "get" }, update: { url: "http://localhost:3000/api/comment", dataType: "json", type: "put", contentType: "application/json" }, create: { url: "http://localhost:3000/api/comment", dataType: "json", type: "post", contentType: "application/json" }, destroy: { // 动态拼接ID到URL url: function(data) { return "http://localhost:3000/api/comment/" + data.idvatc; }, dataType: "json", type: "delete" }, // 序列化请求参数为JSON格式 parameterMap: function(options, operation) { if (operation !== "read" && options.models) { return kendo.stringify(options.models[0]); } else if (operation !== "read") { return kendo.stringify(options); } } }, schema:{ type: "json", model:{ id: "idvatc", fields:{ idvatc: { type: "number", editable : false}, commen: { nullable: true}, // 此处确认与后端字段名一致,如拼写错误请修正 } } }, batch: false, // 关闭批量提交 })
修改后重新测试即可解决全部异常:
- create请求会正常发送JSON格式的字段值,不会再发null
- delete请求会自动拼接ID到URL,不会再返回404
- put请求会发送完整的JSON格式编辑后的数据,不会清空字段
内容的提问来源于stack exchange,提问作者Researcher
相关产品推荐
相关产品推荐

