我已經完成了這個網格自動同步,這樣你可以編輯它,每次改變一個字段的時候,它會提交的更新動作。爲此,您必須設置批處理(true)屬性,該屬性支持編輯多行,但這不是我使用它的方式,因爲自動同步會自動觸發更新事件,所以您沒有機會編輯多個調用更新之前的行。劍道UI MVC網格總是試圖挽救2條
出於某種原因,它總是提交一個新的記錄更新。例如,當我點擊添加新工具欄按鈕toolbar.Create().Text("Add New Time Task");
),你可以在Chrome開發者工具的網絡標籤看到2個記錄被提交給我的控制器......在一個更新的呼叫模型[0]和模型1。
但如果我執行盒內編輯和離開細胞的焦點觸發更新調用... 2個獨立的更新調用正在作出...第一個是增加新的(我可以告訴大家,因爲標識= 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>
你在Grid_SaveOrUpdate控制器操作中做什麼?在創建時,你必須在響應中返回創建的項目,其非零ID設置,否則Kendo網格在下一篇文章中仍然認爲它是新的(id == 0),並將其提交以再次創建。查看http://demos.telerik.com/aspnet-mvc/grid/editing上Editing_Create的實現,並查看它返回的內容。 –
@TheDreadPirateStephen感謝您的想法。我正在那樣做。但這似乎不是問題。如果我刷新頁面,所以沒有掛起的更新或任何操作,然後編輯任何單元格,結果是對我的控制器操作進行了2個不同的調用。第一個數據模型用於ID = 0的新記錄....這是問題調用。第二個調用是使用真正編輯的記錄的數據模型的正確更新調用。看到我添加到原始問題的圖片。 –