Возможно ли иметь разные шаблоны редактора для одной и той же сетки пользовательского интерфейса Kendo?

У меня есть проект MVC 3, в котором я довольно часто использую Kendo UI Grid.

Типичный вид выглядит следующим образом:

@using Kendo.Mvc.UI
@model List<ActionViewModel>
@(Html.Kendo().Grid<ActionViewModel>()
.Name("#grid")    
.Columns(columns =>
    {
        columns.Bound(p => p.Name);
        columns.Command(command => { command.Edit(); command.Destroy(); });
})
.ToolBar(toolbar => toolbar.Create().Text(Resources.Grid.Create))
.Editable(editable => editable.Mode(GridEditMode.PopUp)))
.Sortable()
.Scrollable()
.Filterable(f=>f.Extra(true))
.DataSource(dataSource => dataSource        
    .Ajax() 
    .Events(events => events.Error("error_handler"))
    .Model(model => model.Id(p => p.Id))
    .Create(update => update.Action("Create", "Action"))
    .Read(read => read.Action("Read", "Action"))
    .Update(update => update.Action("Update", "Action"))
    .Destroy(update => update.Action("Delete", "Action"))
))

Мне часто приходится определять пользовательские шаблоны редактора для моих моделей просмотра, они используются во всплывающем окне редактирования пользовательского интерфейса Kendo.

В Kendo UI Grid можно создавать, обновлять и удалять элементы. Всплывающее окно для редактирования и создания по умолчанию использует один и тот же шаблон редактора. Есть ли простой способ иметь два отдельных шаблона редактора для редактирования и удаления?


person Marius    schedule 24.08.2012    source источник


Ответы (1)


ОБНОВЛЕНИЕ:

Чтобы предотвратить ненужные отрицательные голоса за ответ 4-летней давности, я включаю вопрос @ataravati, указанный в комментариях ниже. Перейдите сюда, чтобы получить лучший и более современный ответ: сетка пользовательского интерфейса кендо - разные шаблоны для редактирования и создания

СТАРЫЙ ОТВЕТ:

Это не ответ С#, но он актуален. Я использую JavaScript API, и мне удалось найти способ различать «Добавить» и «Редактировать», а редактор всплывающих окон по-разному реагирует на каждый из них. Я полагал, что при добавлении новой записи все поля будут доступны для редактирования, но при редактировании существующей записи мне нужно было сделать некоторые поля доступными только для чтения.

В двух словах, я добавляю прослушиватель кликов jQuery для кнопок панели инструментов и использую набор операторов if, чтобы определить, имеет ли нажатая кнопка класс k-grid-edit или k-grid-add (или пользовательские классы, если я использую настраиваемые кнопки панели инструментов в моем виджет сетки). Затем я сохраняю тип действия («Добавить» или «Редактировать») в атрибуте данных родительской сетки:

$("#grid").data("action","add");

... который я затем прочитал в пользовательском шаблоне редактора всплывающих окон, чтобы определить, должны ли определенные поля быть доступны только для чтения или нет:

if ($("#grid").data("action") === "add") { /*Do stuff*/ }

Я также использую этот метод, чтобы скрыть или показать кнопки панели инструментов в зависимости от ситуации (например, в режиме встроенного редактора кнопки «Сохранить» и «Отмена» должны быть видны только тогда, когда строка находится в режиме редактирования, поэтому, когда пользователь выбирает строку в сетки и нажимает кнопку «Изменить», отображаются скрытые по умолчанию кнопки «Сохранить» и «Отмена», а остальные кнопки скрыты. состояния).

Для получения более подробной информации, вот моя ветка форума Kendo UI на эту тему:

Отн. ="nofollow noreferrer">http://www.kendoui.com/forums/ui/grid/kendo-grid---how-to-have- Different-custom-editor-for-update-and-create.aspx< /а>

Я опубликовал пример кода, а другой пользователь по имени Филипп придумал другое решение, которое приводит к тому же конечному результату, и также опубликовал свой код.

Итак, отвечая на ваш вопрос:

Нет. Простого пути нет. В настоящее время эта функциональность не включена в структуру пользовательского интерфейса Kendo. Это, однако, все еще возможно с небольшим количеством дополнительной смазки локтя. Или кофеин. :)

Я надеюсь, что это полезно.

person Adrian    schedule 03.10.2012
comment
Благодарю вас! Не тот ответ, на который я надеялся, но, по крайней мере, я получил ответ :) - person Marius; 10.10.2012
comment
Если вы еще раз проверите ветку форума, вы увидите два гораздо более простых (снова JavaScript, извините) ответа, в которых используются знания о внутренней работе виджета сетки. Он включает в себя поиск переменной, содержащей идентификатор выбранной строки, которая передается по цепочке событий. Если он нулевой или пустой, то это вставка (добавление), а если нет, то это обновление (редактирование). kendoui.com/forums/ui/grid/ - person Adrian; 11.10.2012
comment
Вот правильное решение: stackoverflow.com/questions/14321396/ - person ataravati; 20.09.2016
comment
Лол, кто-то минусовал меня без объяснения причин через 4 года. Если у вас есть лучший ответ, опубликуйте его и попросите спрашивающего принять ваш вместо этого - по общему признанию, этот ответ действительно устарел и устарел, и @ataravati указал на поддерживаемое менее хакерское решение по документации, поэтому ясно, что мой ответ больше не идеален и даже не приемлем. - person Adrian; 17.10.2016