[英]Kendo UI MVC Grid always trying to save 2 records
我已将此网格配置为autoSync,以便您可以对其进行编辑,并且每次更改字段时,它将提交Update操作。 为此,您必须设置Batch(true)属性,该属性支持编辑多行,但这不是我使用它的方式,因为自动同步会自动触发更新事件,因此您没有机会编辑多个调用update之前的行。
由于某些原因,它总是提交新的记录更新。 例如,当我单击“添加新工具栏”按钮toolbar.Create().Text("Add New Time Task");
),您可以在Chrome开发者工具的“网络”标签中看到2条记录正在提交到我的控制器...在单个更新调用中是模型[0]和模型1 。
但是,如果我执行InCell编辑并留下单元格焦点以触发更新调用...正在进行2个单独的更新调用...第一个是Add New(我可以知道是因为Id = 0且所有默认值是根据我的网格配置)。
有人知道为什么触发此“添加新类型”调用吗?
@using Kendo.Mvc.UI;
@Html.Partial("_IndexEditViewHeader")
@(Html.Kendo().Grid<OTIS.AppServ.Shared.ViewModels.TimeTaskViewModel>()
.Name("TimeTasksGrid")
.Columns(columns =>
{
columns.Bound(l => l.Id).Hidden();
columns.Bound(l => l.CompanyId).Hidden();
columns.Bound(l => l.CompanyName);
columns.Bound(l => l.TaskDescription);
columns.Bound(l => l.TaskTypeId)
.EditorTemplateName("TimeTaskTypesDDL")
.ClientTemplate("#= TaskTypeDescription #");
columns.Bound(l => l.UserSelectable)
.ClientTemplate("<input type='checkbox' value='#= UserSelectable #' " +
"class='chkbx' onclick='setCheckBoxModelValue(this,"TimeTasksGrid","UserSelectable")'" +
"# if (UserSelectable) { #" +
"checked='checked'" +
"# } #" +
" />"
);
columns.Bound(l => l.HoursMultiplier);
columns.Command(command => command.Destroy()).Width(110);
})
.Editable(editing => editing.Mode(GridEditMode.InCell))
// Add "Create" command
.ToolBar(toolbar =>
{
toolbar.Create().Text("Add New Time Task");
//toolbar.Save();
})
.DataSource(dataSource => dataSource
.Ajax() // Specify that the data source is of ajax type
.ServerOperation(false) // paging, sorting, filtering and grouping will be applied client-side
.Model(model =>
{
model.Id(c => c.Id);
model.Field(c => c.CompanyId).DefaultValue(ViewBag.CompanyId);
model.Field(c => c.TaskDescription).DefaultValue("Task Description");
model.Field(c => c.TaskTypeId).DefaultValue(20);
model.Field(c => c.TaskTypeDescription).DefaultValue("Billable");
model.Field(c => c.HoursMultiplier).DefaultValue(1);
}
)
.Sort(sort =>
{
sort.Add(c => c.CompanyName);
sort.Add(c => c.TaskDescription);
})
// Specify a handler for the error event
.Events(events => events.Error("KendoGridErrors"))
.Batch(true)
// CRUD configuration -->
.Create(create => create.Action("Grid_SaveOrUpdate", "ManageTimeTasks", new { area = "Shared" }))
.Read(read => read.Action("Grid_Read", "ManageTimeTasks", new { area = "Shared" })// Specify the action method and controller name
)
.Update(update => update.Action("Grid_SaveOrUpdate", "ManageTimeTasks", new { area = "Shared" }))
.Destroy(destroy => destroy.Action("Grid_Delete", "ManageTimeTasks", new { area = "Shared" }))
// <-- CRUD configuration
)
.Groupable()
.Sortable()
.Filterable()
)
<script>
$(function () {
$('#TimeTasksGrid').data().kendoGrid.dataSource.options.autoSync = true;
});
</script>
好了,花了6个小时才弄清楚了。 事实证明,在我们的测试数据库中,有人关闭了ID主键列上的Identity默认规范。 然后在测试过程中,保存了一个Id = 0的测试记录,因此每次都将其记录到网格中,然后当您保存或更新另一行时,该ID = 0的行也在该批处理中被保存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.