我的网格类似于下面的代码。
如果在销毁行动中发生错误,他们就会积累
例如,第一个错误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>
一
答案 0 :(得分:1)
您可以调用数据源的cancelChanges
方法,然后调用read
。无需拨打grid.refresh()
,因为dataSource.read()
完成后会自动调用。{/ p>
答案 1 :(得分:0)
好的我不确定如果这是一个合理的答案,但这解决了我的问题
grid.dataSource._destroyed = [];
grid.dataSource.read();
grid.refresh();
我希望它节省一些时间。