Kendo ui 尝试从剑道网格中插入和删除细节时出现错误行为

Kendo ui 尝试从剑道网格中插入和删除细节时出现错误行为,kendo-ui,kendo-grid,kendo-asp.net-mvc,Kendo Ui,Kendo Grid,Kendo Asp.net Mvc,我有master和details剑道网格,当我插入/删除标题时,一切正常,但当我尝试在details网格中插入多条记录时,create语句将在每次尝试添加新记录时循环所有插入的记录(新记录和旧记录),也当我尝试从details表中删除记录时,视图将调用create方法,而不是delete方法 @(Html.Kendo().Grid(Model.ItemSuppliers) .Name("CreateItem_gridSuppliers") .Columns(columns =&

我有master和details剑道网格,当我插入/删除标题时,一切正常,但当我尝试在details网格中插入多条记录时,create语句将在每次尝试添加新记录时循环所有插入的记录(新记录和旧记录),也当我尝试从details表中删除记录时,视图将调用create方法,而不是delete方法

 @(Html.Kendo().Grid(Model.ItemSuppliers)
    .Name("CreateItem_gridSuppliers")
    .Columns(columns =>
    {
        columns.Bound(p => p.ItemCode).Title(MyResources.GridItemCode).Width(100);            
        columns.ForeignKey(p => p.SupplierID, Model.Suppliers, "SupplierID", "SupplierID").Title(MyResources.Supplier).Width(200).EditorTemplateName("SupplierForeignkeyEditor");        
        columns.Bound(p => p.SupplierNameE).Title(MyResources.SupplierNameE).Width(150);                      
        columns.Bound(p => p.CustomDutyPercentage).Title(MyResources.CustomDutyPercentage).Width(200);
        columns.Bound(p => p.CustomDutyRate).Title(MyResources.CustomDutyRate).Width(200);

        columns.Command(command => { command.Edit().Text(MyResources.EditText).UpdateText(MyResources.UpdateText).CancelText(MyResources.CancelText); command.Destroy().Text(MyResources.Delete); }).Width(170);
    })
    .ToolBar(toolBar =>
    {
        toolBar.Create().Text(MyResources.AddNewItem);
    })

                     .Events(e => e.Edit("gridEdit").Cancel("OnCancel").DataBound("CreateItem_gridSuppliers_GridDataBound").Change("ItemSupplierSaved"))
    .Editable(editable => editable.Mode(GridEditMode.InLine))
           .ClientDetailTemplateId("template")

    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(5)
        .ServerOperation(true)
                                        .Events(events => events.Error("gridErrorHandler"))
                                .Events(ev => ev.RequestEnd("ItemSupplierSaved"))
        .Model(model =>
        {
            model.Id(p => p.ItemSuppliersID);
            model.Field(p => p.ItemSuppliersID).Editable(false);
            model.Field(p => p.ItemCode).Editable(false);

        })
                                        .Read(read => read.Action("GetItemSuppliers", "Item", new { __cnv = Model.ConversationKey }))
                             .Update(update => update.Action("ItemSupplier_Update", "Item", new { __cnv = Model.ConversationKey }))
                             .Create(create => create.Action("ItemSupplier_Create", "Item", new { __cnv = Model.ConversationKey }))
                                             .Destroy(destroy => destroy.Action("ItemSupplier_Delete", "Item", new { __cnv = Model.ConversationKey }))
    ))
  <script id="template" type="text/kendo-tmpl">
      @(Html.Kendo().Grid(Model.ItemOrigins)
                        .Name("ItemOrigin_#=ItemSuppliersID#")
                        .Columns(columns =>
                        {
                            columns.Bound(p => p.ItemCode).Hidden();
                            columns.Bound(p => p.ItemSuppliersID).Title(MyResources.ItemSuppliersID).Width(120);
                            columns.Bound(p => p.ItemOriginID).Title(MyResources.ItemOriginID).Width(100);

                            columns.ForeignKey(p => p.OriginID, Model.Origins, "OriginID", "OriginNameE").Title(MyResources.OriginID).Width(100);

                            columns.Bound(p => p.ProductBarCode).Title(MyResources.ProductBarCode).Width(200); 
                            columns.Command(command => { command.Edit().Text(MyResources.EditText).UpdateText(MyResources.UpdateText).CancelText(MyResources.CancelText); command.Destroy().Text(MyResources.Delete); }).Width(190);
                        })
                        .ToolBar(toolBar =>
                        {
                            toolBar.Create().Text(MyResources.AddNewItem);
                        })
                        .Events(e => e.Edit("RemoveItemOriginFilter").Cancel("ReloadGrid"))
                        .Editable(editable => editable.Mode(GridEditMode.InLine).DisplayDeleteConfirmation(true).DisplayDeleteConfirmation(MyResources.ItemOriginDeleteConfirm))

                        .DataSource(dataSource => dataSource
                            .Ajax()
                            .PageSize(5)
                            .ServerOperation(true)

                                    .Events(events => events.Error("gridErrorHandler"))
                            .Model(model =>
                            {
                                model.Id(p => p.ItemOriginID);
                                model.Field(p => p.ItemOriginID).Editable(false);
                                model.Field(p => p.ItemSuppliersID).Editable(false);
                                model.Field(p => p.Origin);

                            })
                                                    .Read(read => read.Action("GetItemOrigin", "Item", new { itemSupplierID = "#=ItemSuppliersID#", __cnv = Model.ConversationKey }))
                                            .Update(update => update.Action("ItemOrigin_Update", "Item", new { itemSupplierID = "#=ItemSuppliersID#", __cnv = Model.ConversationKey }))
                                            .Create(create => create.Action("ItemOrigin_Create", "Item", new { itemSupplierID = "#=ItemSuppliersID#", __cnv = Model.ConversationKey }))
                                            .Destroy(destroy => destroy.Action("ItemOrigin_Delete", "Item", new { itemSupplierID = "#=ItemSuppliersID#", __cnv = Model.ConversationKey }))
                            )
                            .ToClientTemplate()
                        )
</script>
@(Html.Kendo().Grid(Model.ItemSuppliers)
.名称(“CreateItem\u供应商”)
.列(列=>
{
columns.Bound(p=>p.ItemCode).Title(MyResources.GridItemCode).Width(100);
columns.ForeignKey(p=>p.SupplierID,Model.Suppliers,“SupplierID”,“SupplierID”).Title(MyResources.Supplier).Width(200).EditorTemplateName(“SupplierForeignkeyEditor”);
columns.Bound(p=>p.SupplierNameE).Title(MyResources.SupplierNameE).Width(150);
columns.Bound(p=>p.CustomDutyPercentage).Title(MyResources.CustomDutyPercentage).Width(200);
columns.Bound(p=>p.CustomDutyRate).Title(MyResources.CustomDutyRate).Width(200);
columns.Command(Command=>{Command.Edit().Text(MyResources.EditText).UpdateText(MyResources.UpdateText).CancelText(MyResources.CancelText);Command.Destroy().Text(MyResources.Delete);}).Width(170);
})
.ToolBar(ToolBar=>
{
toolBar.Create().Text(MyResources.AddNewItem);
})
.Events(e=>e.Edit(“gridEdit”).Cancel(“OnCancel”).DataBound(“CreateItem\u gridSuppliers\u GridDataBound”).Change(“ItemSupplierSaved”))
.Editable(可编辑=>Editable.Mode(GridEditMode.InLine))
.ClientDetailTemplateId(“模板”)
.DataSource(DataSource=>DataSource
.Ajax()
.页面大小(5)
.ServerOperation(真)
.Events(Events=>Events.Error(“gridErrorHandler”))
.Events(ev=>ev.RequestEnd(“ItemSupplierSaved”))
.Model(Model=>
{
Id(p=>p.ItemSuppliersID);
model.Field(p=>p.ItemSuppliersID).可编辑(false);
model.Field(p=>p.ItemCode).可编辑(false);
})
.Read(Read=>Read.Action(“GetItemSuppliers”,“Item”,new{{uuu cnv=Model.ConversationKey}))
.Update(Update=>Update.Action(“ItemSupplier\u Update”,“Item”,new{{{uuu cnv=Model.ConversationKey}))
.Create(Create=>Create.Action(“ItemSupplier\u Create”,“Item”,new{{{uu\u cnv=Model.ConversationKey}))
.Destroy(Destroy=>Destroy.Action(“ItemSupplier_Delete”,“Item”,new{{{uuu cnv=Model.ConversationKey}))
))
@(Html.Kendo().Grid(Model.itemOriginates)
.Name(“ItemOrigin_35;=ItemSuppliersID#”)
.列(列=>
{
columns.Bound(p=>p.ItemCode.Hidden();
columns.Bound(p=>p.ItemSuppliersID).Title(MyResources.ItemSuppliersID).Width(120);
columns.Bound(p=>p.ItemOriginID).Title(MyResources.ItemOriginID).Width(100);
columns.ForeignKey(p=>p.OriginID,Model.Origins,“OriginID”,“OriginNameE”).Title(MyResources.OriginID).Width(100);
columns.Bound(p=>p.ProductBarCode).Title(MyResources.ProductBarCode).Width(200);
columns.Command(Command=>{Command.Edit().Text(MyResources.EditText).UpdateText(MyResources.UpdateText).CancelText(MyResources.CancelText);Command.Destroy().Text(MyResources.Delete);}).Width(190);
})
.ToolBar(ToolBar=>
{
toolBar.Create().Text(MyResources.AddNewItem);
})
.Events(e=>e.Edit(“RemoveItemOriginFilter”).Cancel(“ReloadGrid”))
.Editable(Editable=>Editable.Mode(GridEditMode.InLine).DisplayDeleteConfirmation(true).DisplayDeleteConfirmation(MyResources.ItemOriginDeleteConfirmation))
.DataSource(DataSource=>DataSource
.Ajax()
.页面大小(5)
.ServerOperation(真)
.Events(Events=>Events.Error(“gridErrorHandler”))
.Model(Model=>
{
model.Id(p=>p.ItemOriginID);
model.Field(p=>p.ItemOriginID).Editable(false);
model.Field(p=>p.ItemSuppliersID).可编辑(false);
model.Field(p=>p.Origin);
})
.Read(Read=>Read.Action(“GetItemOrigin”,“Item”,new{itemSupplierID=“#=ItemSuppliersID#“,_cnv=Model.ConversationKey}))
.Update(Update=>Update.Action(“ItemOrigin_Update”,“Item”,new{itemSupplierID=“#=ItemSuppliersID#”,_cnv=Model.ConversationKey}))
.Create(Create=>Create.Action(“ItemOrigin_Create”,“Item”,new{itemSupplierID=“#=ItemSuppliersID#”,_cnv=Model.ConversationKey}))
.Destroy(Destroy=>Destroy.Action(“ItemOrigin_Delete”,“Item”,new{itemSupplierID=“#=ItemSuppliersID#”,_cnv=Model.ConversationKey}))
)
.ToClient模板()
)
这是我的控制器

[AcceptVerbs(HttpVerbs.Post)]
 public ActionResult ItemOrigin_Create([DataSourceRequest] DataSourceRequest request, ItemOriginViewModel item, int itemSupplierID, string __cnv)
{
     List<ItemOriginViewModel> itemOrigins = new List<ItemOriginViewModel>();
     if (Session["ItemOrigin_" + __cnv + itemSupplierID] != null)
        {
            itemOrigins = (List<ItemOriginViewModel>)Session["ItemOrigin_" + __cnv + itemSupplierID];

       if (item.UID == null)
        {
            item.UID = Guid.NewGuid().ToString();
             item.ItemSuppliersID = itemSupplierID;
             itemOrigins.Add(item);
         }
          else
         {
               int index = itemOrigins.FindIndex(x => x.UID == item.UID);
               itemOrigins[index] = item;
          }
     }
     else
     {
         item.UID = Guid.NewGuid().ToString();
         item.ItemSuppliersID = itemSupplierID;
         itemOrigins.Add(item);
     }
     Session["ItemOrigin_" + __cnv + itemSupplierID] = itemOrigins;     
      return Json(itemOrigins.ToDataSourceResult(request));            
  }



[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ItemOrigin_Delete([DataSourceRequest] DataSourceRequest request, ItemOriginViewModel item, string __cnv)
        {
            List<ItemOriginViewModel> itemOrigins = (List<ItemOriginViewModel>)Session["ItemOrigin_" + __cnv + item.ItemSuppliersID];
            int index = itemOrigins.FindIndex(x => x.ItemOriginID == item.ItemOriginID);
            itemOrigins.RemoveAt(index);
            Session["ItemOrigin_" + __cnv + item.ItemSuppliersID] = itemOrigins;
            var result = itemOrigins;
            return Json(result.ToDataSourceResult(request));
        }
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ItemOrigin_Create([DataSourceRequest]DataSourceRequest请求,ItemOriginViewModel项,int itemSupplierID,string__cnv)
{
List ItemOriginates=新列表();
{
    "ItemSuppliersID": 0,
    "ItemCode": "ABC"
}
{
    "ItemSuppliersID": 123, // <-- ID field is now set
    "ItemCode": "ABC"
}