Kendo ui 尝试从剑道网格中插入和删除细节时出现错误行为
我有master和details剑道网格,当我插入/删除标题时,一切正常,但当我尝试在details网格中插入多条记录时,create语句将在每次尝试添加新记录时循环所有插入的记录(新记录和旧记录),也当我尝试从details表中删除记录时,视图将调用create方法,而不是delete方法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 =&
@(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"
}