Read,Create,Update,Destroy在一次只处理一行时工作正常。
但是,当我尝试添加两个Customer时,EditingPopup_Create被调用三次。一个用于第一行,两个用于第二行...如果我添加两行以上,则会出现相同的模式。 EditingPopup_Create方法的运行次数与其客户的数量相同......
目前的实施是这样的:
@(Html.Kendo().Grid<CustomerModel>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.Name);
columns.Bound(p => p.ContactPerson);
columns.Bound(p => p.ContactPersonEmail);
columns.Bound(p => p.ContactPersonPhone);
columns.Bound(p => p.MainPhoneNumber);
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(180);
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.PopUp).TemplateName("CustomerPopUpTemplate"))
.Pageable()
.Sortable()
.Scrollable()
.HtmlAttributes(new {style = "height:500px;"})
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
//.Events(events => events.Error("error_handler"))
.Model(model => model.Id(p => p.Id))
.Read(read => read.Action("EditingPopup_Read", "CustomerManagement"))
.Create(update => update.Action("EditingPopup_Create", "CustomerManagement"))
.Update(update => update.Action("EditingPopup_Update", "CustomerManagement"))
.Destroy(destroy => destroy.Action("EditingPopup_Destroy", "CustomerManagement"))
)
)
这可能是一个新手的错误,但我似乎无法弄清楚为什么会发生这种情况。在我看来,网格的布线应该只为每个实例调用一次方法。
非常感谢解释:)
答案 0 :(得分:1)
当您在创建时执行保存时,您是否更改了与创建的项目关联的ID?
我怀疑你在做什么并没有改变提供的内容,而网格将其视为另一个创建。
因此,当您将项目保存回数据库时,将id设置为生成的数据库,或者如何生成它,您应该看到它没有进行第二次调用。
显示控制器代码也有助于回答它。
确保将模型返回到视图,以便通过json更新与其关联的id。
例如
返回json(new {model} .todatasourceresult(request,modelState))
答案 1 :(得分:0)
找到一个帖子回答了我的问题,并且更多地填写了这个问题......
Kendo UI Grid posting back already Inserted Rows again
解释它的一种方法是,如果一个对象的Id为0,则网格认为它是一个新行。如果它是一个新行,它认为必须插入它。如果在添加行时未更新网格中的对象/行的值,它将尝试重新添加它,因为它认为它不存在。
我希望这可以帮助那里的任何人...... :)