Telerik MVC Grid 内联编辑需要页面刷新才能显示更改

Telerik MVC Grid Inline editing requires page refresh to display changes

我有一个 Telerik MVC 网格,我正在其中更新内联行(更新名称列,数字列不可编辑)

 @Html.Kendo().Grid(Model.Employees)
        .Name("EmployeeGrid")
        .Columns(col =>
        {
            col.Bound(o => o.EmployeeNumber);
            col.Bound(o => o.Name).Width(250);
            col.Command(command => { command.Edit(); });
        })
        .Editable(editable => editable.Mode(GridEditMode.InLine))
        .DataSource(dataSource => dataSource
        .Ajax()
        .Events(e => e.RequestEnd("onGridDataSourceRequestEnd"))
        .Model(model =>
        {
            model.Id(o => o.EmployeeNumber);
            model.Field(o => o.EmployeeNumber).Editable(false);
        })
        .Update(update => update.Action("EditingInline_Update", "EmployeeUpdate"))
        .ServerOperation(false)
        )
        .Render();


 function onGridDataSourceRequestEnd(e) {
    if (e.type == "update") {
        console.log('I am inside Update');
        $("#EmployeeGrid").data("kendoGrid").dataSource.read();
    }
}

我的问题是,当我单击网格中的“更新”按钮时,上面的代码通过调用操作 EmployeeUpdate 来更新记录。但是,即使我在 JS 函数中调用数据源读取,该更改也不会立即反映在网格中。控制台显示 "I am inside Update" 但不刷新网格。如果我刷新页面,我会看到更新行。

请让我知道我错过了什么。谢谢。

也许您应该尝试使用 refresh() 函数刷新网格:

function onGridDataSourceRequestEnd(e) {
    if (e.type == "update") {
        console.log('I am inside Update');
        $("#EmployeeGrid").data("kendoGrid").dataSource.read();

        // add this line
        $("#EmployeeGrid").data("kendoGrid").refresh();
    }
}

注意read()中的函数dataSource只是通过请求向服务器重新加载数据源,网格内容在使用refresh()之前仍然没有改变。

在进行更新时,您不必 refresh/reload 您的网格,您只需要 return 来自控制器的更新记录,网格小部件将处理其余部分!

请查看 telerik demo-page

我最常犯的错误是忘记 return 数据源结果:

.ToDataSourceResult(request,ModelState)

Telerik 通常 returns 与发送到更新的模型相同,但我通常 returns 与读取函数 returns 相同的对象(如果读取确实我也会在更新的记录中得到它。