当我使用 Kendo UI 数据源在服务器端创建新项时,如何使用插入到服务器端数据库中的新记录的 ID 更新客户端数据项的 ID?
4 回答
做更多的研究我发现这个非常有用的信息确实应该在文档中,但它被“隐藏”在一个不太容易找到的论坛搜索消息中:
http://www.kendoui.com/forums/ui/grid/refresh-grid-after-datasource-sync.aspx#2124402
我不确定这是否是最好的方法,但它解决了我的问题!
该解决方案只是使用数据源读取方法来使用来自服务器的数据更新模型实例。
宝贵的信息是在哪里完成的:在transport.create对象的“完成”事件中!
这是代码:
transport: {
read: {
url: "http://myurl.json"
},
create: {
url: "http://mycreate.json",
type: "POST",
complete: function(e) {
$("#grid").data("kendoGrid").dataSource.read();
}
},
为了避免 read 方法引入的额外服务器调用,如果您的 create 方法返回一个对象,数据源将自动为您插入它。
知道您需要做的就是从数据库中设置 id 字段并返回模型。
例如,用于创建的 ASP MVC 操作的伪代码。
public JsonResult CreateNewRow(RowModel rowModel)
{
// rowModel.id will be defaulted to 0
// save row to server and get new id back
var newId = SaveRowToServer(rowModel);
// set new id to model
rowModel.id = newId;
return Json(rowModel);
}
我遇到了同样的问题,我想我可能已经找到了答案。如果在架构中定义了保存结果的对象,则必须在同一对象中返回创建链接的结果。例子:
schema: {
data: "Results",
total: "ResultsCount", ....
}
示例 MVC 方法:
public JsonResult CreateNewRow(RowModel rowModel)
{
// rowModel.id will be defaulted to 0
// save row to server and get new id back
var newId = SaveRowToServer(rowModel);
// set new id to model
rowModel.id = newId;
return Json(new {Results = new[] {rowModel}});
}
只是添加到杰克的答案(我没有评论的声誉),如果您的创建和更新操作返回具有与剑道数据源中定义的相同架构的数据,数据源将自动更新 Id 字段以及任何其他可能已被操作调用修改的字段。您不必做任何其他可以正确形成结果的事情。我使用此功能在服务器端计算一堆东西,并向客户端显示结果,而无需完全重新加载数据。