kendo ui grid对错误重复销毁操作

时间:2015-01-28 03:36:59

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

我的网格类似于下面的代码。 如果在销毁行动中发生错误,他们就会积累 例如,第一个错误1调用destroy动作,第二个2个调用,第三个错误3调用.......
经过一番调查后,我发现待装的物品存放在dataSource的一个数组(_destroyed)中, 因此,每次单击destroy按钮时,都会为每个项目调用destroy动作。

我尝试将null分配给_destroyed数组,但是当我再次调用destroy动作时,这会产生js错误。

@(Html.Kendo().Grid<someType>()
        .Name("grid")
        .Columns(columns =>
        {
            columns.Bound(p => p.Name);            
            columns.Command(command => 
            { 
                command.Edit();
                command.Destroy();
            }).Width(250);
        })            
        .Editable(editable => { editable.Mode(GridEditMode.PopUp); editable.TemplateName("myTemplate"); })
        .Pageable()
        .Sortable()
        .Filterable()
        .DataSource(dataSource => dataSource
            .Ajax()
            .PageSize(50)
            .Events(events => events.Error("error_handler"))
            .Model(model => model.Id(p => p.Id))
            .Create(update => update.Action("EditingPopup_Create", "myController"))
            .Read(read => read.Action("EditingPopup_Read", "myController"))
            .Update(update => update.Action("EditingPopup_Update", "myController"))
            .Destroy(update => update.Action("EditingPopup_Destroy", "myController"))
        )

 <script type="text/javascript">
        function error_handler(e) {
            if (e.errors) {
                var message = "Errors:\n";
                $.each(e.errors, function (key, value) {
                    if ('errors' in value) {
                        $.each(value.errors, function () {
                            message += this + "\n";
                        });
                    }
                });
                alert(message);

                $(".k-grid").each(function () {
                    var grid = $(this).data("kendoGrid");
                    if (grid !== null && grid.dataSource == e.sender) {
                        grid.one('dataBinding', function (e) {
                            e.preventDefault();
                        });

                        grid.dataSource.read();
                        grid.refresh();
                    }
                });
            }
        }
</script>

2 个答案:

答案 0 :(得分:1)

您可以调用数据源的cancelChanges方法,然后调用read。无需拨打grid.refresh(),因为dataSource.read()完成后会自动调用。{/ p>

答案 1 :(得分:0)

好的我不确定如果这是一个合理的答案,但这解决了我的问题

grid.dataSource._destroyed = [];
grid.dataSource.read();
grid.refresh();

我希望它节省一些时间。