如何在javascript中调用(剑道)grid.SaveChanges()后确定是否存在验证错误

时间:2013-05-03 09:34:53

标签: kendo-ui kendo-grid kendo-asp.net-mvc

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

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

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

提前谢谢

1 个答案:

答案 0 :(得分:1)

我假设你正在使用MVC包装器但是调用grid.SaveChanges()作为脚本的一部分。由于您使用的是内联编辑模式,这意味着您正在使用Ajax。如果这些假设是正确的,那么当您调用SaveChanges()时,将执行包装器中指定的控制器操作。如果您挂钩到.Error事件,您可以执行需要执行的任何脚本(即使这只是设置您在脚本的其他部分中检查的变量)。查看剑道网站入门中的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();
    }
}