Asp.net mvc 剑道ui网格在出错时重复销毁操作

Asp.net mvc 剑道ui网格在出错时重复销毁操作,asp.net-mvc,kendo-ui,kendo-grid,kendo-datasource,Asp.net Mvc,Kendo Ui,Kendo Grid,Kendo Datasource,我有一个类似于下面代码的网格。 如果销毁操作发生错误,则会累积错误。 例如,第一个错误1调用销毁操作,第二个错误2调用,第三个错误3调用…… 经过一番调查,我发现要放冰雹的物品存储在数据源中的一个数组中(_destromed) 因此,每次单击销毁按钮时,都会为每个项目调用销毁操作 我尝试将null赋值给_destrocted数组,但当我再次调用destroy action时,出现了js错误 @(Html.Kendo().Grid<someType>() .Name("

我有一个类似于下面代码的网格。 如果销毁操作发生错误,则会累积错误。
例如,第一个错误1调用销毁操作,第二个错误2调用,第三个错误3调用……
经过一番调查,我发现要放冰雹的物品存储在数据源中的一个数组中(_destromed)
因此,每次单击销毁按钮时,都会为每个项目调用销毁操作

我尝试将null赋值给_destrocted数组,但当我再次调用destroy action时,出现了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>
@(Html.Kendo().Grid())
.名称(“网格”)
.列(列=>
{
columns.Bound(p=>p.Name);
columns.Command(Command=>
{ 
command.Edit();
command.Destroy();
}).宽度(250);
})            
.Editable(Editable=>{Editable.Mode(GridEditMode.PopUp);Editable.TemplateName(“myTemplate”);})
.Pageable()
.Sortable()
.可过滤()
.DataSource(DataSource=>DataSource
.Ajax()
.页面大小(50)
.Events(Events=>Events.Error(“错误处理程序”))
.Model(Model=>Model.Id(p=>p.Id))
.Create(update=>update.Action(“EditingPopup\u Create”,“myController”))
.Read(Read=>Read.Action(“EditingPopup\u Read”,“myController”))
.Update(Update=>Update.Action(“EditingPopup\u Update”,“myController”))
.Destroy(update=>update.Action(“EditingPopup\u Destroy”,“myController”))
)
函数错误\u处理程序(e){
如果(如错误){
var message=“错误:\n”;
$。每个(例如错误、函数(键、值){
如果(值中的“错误”){
$.each(value.errors,函数(){
消息+=此+“\n”;
});
}
});
警报(信息);
$(“.k-grid”)。每个(函数(){
var grid=$(this.data(“kendoGrid”);
if(grid!==null&&grid.dataSource==e.sender){
grid.one('数据绑定',函数(e){
e、 预防默认值();
});
grid.dataSource.read();
grid.refresh();
}
});
}
}

a

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

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

我希望它能节省一些时间。

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