我在MVC Web应用程序中使用KendoUI库,我选择在网格中使用它们的inbuilt popup editor,以便添加记录。在大多数情况下,它运行良好,但是当我提交新记录时,它会提交我的新数据,但还会提交网格中的所有先前数据行,这导致重复项出现在数据库中。
网格
@(Html.Kendo().Grid<Melina.Models.CarsList>()
.Name("carsList")
.Columns(columns =>
{
columns.Bound(c => c.CarName).Filterable(ftb => ftb.Cell(cell => cell.Operator("contains").SuggestionOperator(FilterType.Contains)));
columns.Bound(c => c.CarModel);
columns.Bound(c => c.EngineSize);
columns.Bound(c => c.BuildDate).Format("{0:dd/MM/yyyy}");
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(250);
})
.ToolBar(toolBar => {
toolBar.Create();
})
.Pageable()
.Sortable()
.Editable(editable => editable.Mode(GridEditMode.PopUp).TemplateName("CarsForm"))
.Filterable(ftb => ftb.Mode(GridFilterMode.Row))
.DataSource(data => data
.Ajax()
.Events(events => events.Error("error_handler"))
.Model(model => model.Id(p => p.CarId))
.PageSize(10)
.Read(read => read.Action("FetchCars", "Home"))
.Create(create => create.Action("AddCar", "Home"))
.Update(update => update.Action("EditCar", "Home"))
.Destroy(destroy => destroy.Action("DeleteCar", "Home"))
)
)
我的设置与官方文档唯一的不同是我使用的是自定义编辑器。
CarsForm
@model Melina.Models.CarsList
<div>
<input type="text" name="CarName" id="CarName" />
... etc
... etc
</div>
我正在使用通用存储库,从Kendo弹出编辑器处理提交数据的方法如下
AddCar
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddCar([DataSourceRequest] DataSourceRequest request, CarsList car)
{
if (car!= null && ModelState.IsValid)
{
uow.CarRepository.Insert(car);
uow.Save();
}
return Json(new[] { car }.ToDataSourceResult(request, ModelState));
}
因此,如果我们假设我的网格中有1行数据:
Ford | Fiest | 1.3 | 01/02/2018
然后我点击“添加新记录”并填写我的自定义表格并添加以下信息:
Holden | Commodore | 5.0 | 05/06/2006
当我点击保存时,控制器方法AddCar
收到两个提交,我的第一个提交和我刚提交的新提交。因此,您得到的重复数据会随着我添加的每一行不断堆积。有人遇到过吗?