为什么我的KendoUI Grid Popup Editor多次提交数据?

时间:2019-01-31 10:24:39

标签: kendo-ui repository-pattern

我在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收到两个提交,我的第一个提交和我刚提交的新提交。因此,您得到的重复数据会随着我添加的每一行不断堆积。有人遇到过吗?

0 个答案:

没有答案