3

我在我的 javascript 函数中调用 grid.SaveChanges() 。网格正在使用内联编辑模式。

我的问题是如果有一些客户端验证错误,例如无效的日期格式,那么我不能执行一些 DOM 操作。不幸的是 grid.SaveChanges() 没有返回值,并且在网格文档页面中搜索关键字“有效”没有结果。(传送到 Kendo Grid API 文档

那么:如何确定 SaveChanges() 之后是否存在验证错误或数据是否与持久存储成功同步?

提前谢谢

4

1 回答 1

1

我假设您正在使用 MVC 包装器,但grid.SaveChanges()作为脚本的一部分进行调用。由于您使用的是内联编辑模式,这意味着您使用的是 Ajax。如果这些假设是正确的,那么当您调用 SaveChanges() 时,将执行包装器中指定的控制器操作。如果您挂钩 .Error 事件,您可以执行任何需要执行的脚本(即使这只是设置您在脚本的其他部分中检查的变量)。在 Kendo 的网站上查看 Getting Started的Ajax Editing部分。您的 Razor 代码将类似于以下内容(其中一些是无关的,我将其从生产代码中提取出来并稍作修改):

@(Html.Kendo().Grid(Model)
.Name("Grid")
.Columns(cols =>
    {
        cols.Bound(p => p.ColumnA);

    })
.Editable(edit => edit.Enabled(true).Mode(GridEditMode.InCell))
.DataSource(ds => ds
            .Ajax()
            .AutoSync(false)
            .Model(model => 
                {
                    model.Id(p => p.ColumnId);                   
                })
            // Configure RU -->
                .Read(read => read.Action("_MyRead", "MyController").Data("additionalData"))
                .Update(update => update.Action("_MyUpdate", "MyController").Data("additionalData"))
                //.ServerOperation(false)
                .Batch(true)
                .Events(events => events
                    .Error("onError")            
                    )
                )
            // <-- Configure RU
        .Pageable(page => page.PageSizes(new int[] { 10, 25, 50, 100 }).Enabled(true))
        .Groupable(group => group.Enabled(true))
        .Filterable(filter => filter.Enabled(true).Extra(false))
        .Sortable(sort => sort.Enabled(true).SortMode(GridSortMode.SingleColumn).AllowUnsort(true))
        .Navigatable(nav => nav.Enabled(true))
        .Resizable(resizing => resizing.Columns(true))
        .Reorderable(reorder => reorder.Columns(true))
            )

然后您的 onError 脚本将如下所示:

function onError(e, status) {
    if (e.errors) {
        var message = "The following errors have occurred and changes will be discarded:\n";

        $.each(e.errors, function (key, value) {
            if (value.errors) {
                message += value.errors.join("\n");
            }
        });

        alert(message);
        var grid = $("#Grid").data("kendoGrid");
        grid.cancelChanges();
    }
}
于 2013-08-01T16:30:19.460 回答