将许多行保存到数据库

时间:2014-06-04 06:50:40

标签: c# kendo-grid

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"))
              )
              )

这可能是一个新手的错误,但我似乎无法弄清楚为什么会发生这种情况。在我看来,网格的布线应该只为每个实例调用一次方法。

非常感谢解释:)

2 个答案:

答案 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,则网格认为它是一个新行。如果它是一个新行,它认为必须插入它。如果在添加行时未更新网格中的对象/行的值,它将尝试重新添加它,因为它认为它不存在。

我希望这可以帮助那里的任何人...... :)