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

时间:2018-11-09 02:53:49

标签: asp.net-mvc telerik telerik-grid telerik-mvc

我有一个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函数中读取的数据源,该更改也不会立即反映在网格中。控制台显示“我在Update中”,但不刷新网格。如果刷新页面,我会看到更新行。

请让我知道我在想什么。谢谢。

2 个答案:

答案 0 :(得分:0)

可能您应该尝试使用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();
    }
}

请注意,dataSource中的read()函数仅根据请求将数据源重新加载到服务器,在使用refresh()之前,网格内容仍未更改。

答案 1 :(得分:0)

进行更新时,您不必刷新/重新加载网格,只需从控制器中返回更新的记录,grid-widget将负责其余的工作!

请检出telerik demo-page

我最常见的错误是忘记返回数据源结果:

.ToDataSourceResult(request,ModelState)

Telerik通常返回与更新相同的模型,但我通常返回与read函数返回的对象相同的对象(如果read也会在更新后的记录中得到该对象)。