У меня есть MVC3 Razor View для простого контактного объекта — имени и фамилии, должности и т. д. — включая сетку, используемую для сохранения одного или нескольких телефонных номеров.
Сетка отображается в режиме встроенного редактирования после того, как пользователь нажимает «Сохранить», чтобы создать новый элемент, и появляется новый идентификатор для сохранения телефонных номеров. Это работает нормально, но клиент предпочел бы, чтобы вся форма сохранялась при первом нажатии, включая любые изменения в сетке телефонных номеров. Хитрость заключается в том, что они хотят сохранить существующий встроенный 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"))))