我有一个MVC3 Razor视图,用于简单的联系人实体-姓和名,职位等-包括用于保存一个或多个电话号码的网格。
在用户单击save以创建新项目之后,网格以内联编辑模式设置,并且有一个新Id用于保存电话号码。这可以正常工作,但客户端更希望在第一次单击时保存整个表单,包括对电话号码网格的任何编辑。棘手的一点是他们想要保持现有的内联UX,这就是我的问题所在:
如何保持所有与剑道网格内联编辑模式相关的UI/UX,但保存为批处理,如果它被设置为单元格内编辑?
我读过各种关于点击保存网格更改的文章和教程,但大多数都是针对单元格内编辑的,而不是针对Razor的。
这里是网格的代码,因为它站(没有编辑器模板或js函数),请让我知道,如果我能提供任何进一步的细节,我会更新我的问题。
@(Html.Kendo().Grid<ContactNumberListItem>()
.Name("PhoneNumbersGrid")
.Columns(columns =>
{
columns.Bound(model => model.Number).Title("Number").Format("{0:#,#}");
columns.Bound(model => model.Type).EditorTemplateName("_tmpl_contactPhoneNumberType_dd").Title("Type").ClientTemplate("#:Type.Name#");
columns.Command(commands =>
{
commands.Edit().Text(" ")
.UpdateText(" ")
.CancelText(" "); // The "edit" command will edit and update data items
commands.Custom("Delete").Text(" ").Click("DeleteContactPhoneNumber"); // The "destroy" command removes data items
}).Width(98);
})
.ToolBar(toolBar => toolBar.Create())
.Editable(editable => editable.Mode(GridEditMode.InLine).DisplayDeleteConfirmation(false))
.Selectable()
.Events(events => events
.DataBound("OnGridDataBound")
.Cancel("OnGridCancel")
.Edit("OnGridEdit")
.Save("OnGridSave"))
.DataSource(dataSource => dataSource
.Ajax()
.Batch(false)
.PageSize(5)
.ServerOperation(false)
.Model(model =>
{
model.Id(x => x.Id);
model.Field(t => t.Type).DefaultValue(((List<PhoneNumberTypeListItem>)ViewBag.ContactPhoneNumberTypes).FirstOrDefault());
})
.Create(update => update.Action("CreateContactPhoneNumber", "ContactPhoneNumber").Data("GetContactId"))
.Update(update => update.Action("UpdateContactPhoneNumber", "ContactPhoneNumber"))
.Read(read => read.Action("SelectContactPhoneNumbers", "ContactPhoneNumber").Data("GetContactId"))
.Events(e => e.Error("error_handler"))))
答案似乎是使用占位符控制器方法来创建/更新/删除-也就是说,不做任何事情的方法-然后使用下面的代码在任何单击或操作时向控制器提交:
http://www.telerik.com/support/code-library/save-all-changes-with-one-request