如何编辑 Kendo MVC Grid 的本地数据

Tru*_*f42 5 kendo-grid kendo-asp.net-mvc

根据 Telerik 网站上有关数据本地绑定的文档:

服务器 - 小部件在进行分页、排序和过滤时执行服务器端请求 (HTTP GET)。

Ajax - 小部件在进行分页、排序、过滤、分组或保存数据时将发出 Ajax 请求。

这是否意味着目前无法使用 Kendo 的 MVC Grid 在本地编辑数据?

我的目标是能够编辑网格,然后将整个页面以及模型的其他部分提交回服务器,并将数据全部保存在一起,而不是进行 ajax 调用来将数据保存在网格中。

使用下面的代码我可以加载网格,但是编辑单元格不会持续存在,并且当我转到后退页面时,数据不会绑定模型。

        @(Html.Kendo().Grid<LaborTimeViewModel>(Model.LaborTimes)
        .Name("Grid")
        .Columns(columns =>
        {
            columns.Bound(p => p.Procedure).ClientTemplate("#=Procedure ? Procedure.ProcedureDescription : ''#").EditorTemplateName("ProcedureEditor");
            columns.Bound(p => p.PerformedBy).ClientTemplate("#=PerformedBy ? PerformedBy.UserDescription : ''#").EditorTemplateName("UserEditor");
         columns.Bound(p => p.LaborTime).ClientTemplate("#if (LaborTime) {# #:kendo.toString(LaborTime.Hours, '00')#:#:kendo.toString(LaborTime.Minutes, '00')#:#:kendo.toString( '00')# #}#").EditorTemplateName("TimePickerEditor"); //.EditorTemplateName("NumericEditor");

        })
        .Editable(editable => editable.Mode(GridEditMode.InCell))
        .Pageable()
        .Sortable()
        .Scrollable()
        .DataSource(dataSource => dataSource
            .Ajax()
            .PageSize(20)
            .ServerOperation(false) 
            .Model(model =>
                {
                    model.Id(p => p.WONumber);
                    model.Id(p => p.PerformedBy);
                    model.Id(p => p.TimerStart);
                })
        )
    )
Run Code Online (Sandbox Code Playgroud)

小智 3

我找到了一种解决网格问题的方法,试图保存到服务器。
首先,为网格构建器上绑定的数据添加事件。

.Events(events => events.DataBound("onGridDataBound"))
Run Code Online (Sandbox Code Playgroud)

然后,为 onGridDataBound 添​​加这个 javascript 函数

function onGridDataBound(e){
  //Prevent the grid from talking to the server
  var transport = e.sender.dataSource.transport;
  transport.create = function(e){e.success();}
  transport.destroy = function(e){e.success();}
  transport.update = function(e){e.success();}
}
Run Code Online (Sandbox Code Playgroud)

通过覆盖数据源上的传输函数,网格将不会尝试进行 Ajax 调用,并且数据将保存到网格的本地模型中。

确保在网格脚本运行之前声明该函数,方法是使用“DeferredScripts”或在页面中的网格之前声明 JS 函数。