我有一个使用MVC扩展的Kendo网格buitl:
@(Html.Kendo().Grid<FooDetailViewModel>()
.Name("fooGrid")
.Editable(editable => editable.DisplayDeleteConfirmation("Are you sure you want to delete this item?"))
.Sortable()
.Pageable()
.DataSource(datasource => datasource
.Ajax()
.Read(read => read.Action("GetFooSummaries", "Foo", new { categoryId = @Model.CategoryId }))
.Model(model => model.Id(x => x.FooId))
.Destroy(destroy => destroy.Action("Delete", "Foo"))
.Columns(col =>
{
col.Bound(x => x.FooId).Hidden();
col.Bound(x => x.FooNumber);
col.Template(@<text></text>)
.ClientTemplate("<a class='blue-tableRowIcon glyphicon glyphicon-edit' href='" + Url.Action("Details", new { id = "#= Id #" }) + "'></a>" + "<div class='k-button-icontext k-grid-delete red-tableRowIcon glyphicon glyphicon-remove' ></div>"
)
.FooterTemplate("<a class='green-tableRowIcon glyphicon glyphicon-plus' href='" + Url.Action("Details", new { id = Guid.Empty }) + "'></a>")
.Title("Action")
.Width(94);
}))
我的问题是,我点击的第一个删除按钮不会调用控制器上的删除操作,但会点击后续行。例如,如果网格显示两行数据,我单击删除按钮其中一个(无论哪一个),我将按预期获得确认对话框。如果我单击“确定”,对话框将关闭,并且呼叫将发送到控制器,但该呼叫似乎缺少其操作名称,因此呼叫转到“http://Site/Area/Foo”而不是“{{3} “如预期的那样。然后该行从客户端网格中消失,尽管从未调用控制器上的删除操作。
如果我然后单击其他行上的删除按钮并关闭对话框,则会呼叫控制器,但这次填写了操作名称,因此它正确连接到后端,我从数据库中删除该行。
刷新页面会恢复第一个“已删除”行,因为它从未真正删除过。
正如我所说,我先点击哪一行,或者甚至有多少行似乎并不重要。我尝试首先删除哪一行不能正确调用控制器,但任何后续删除都会。如果它始终是第一行或其他什么,我认为这是我的代码中某处的一个一个错误的错误,但事实上它始终只是你点击的那一行表示某处的状态问题。
我已经用destroy.Url调用了对destroy.Action的调用(Url.Action ......无济于事,它完全相同。
有没有人见过这个?你有没有弄清楚问题是什么?