Использование элемента управления автозаполнения в настраиваемом всплывающем редакторе для сетки

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

Однако окно не будет сохранено, когда я сохраню изменения. Как я могу убедиться, что Kendo по-прежнему использует его в качестве поля для моей модели, но также и в качестве элемента автозаполнения?

Сетки:

@(Html.Kendo().Grid<Receipt>()
    .Name("GridReceipts")
    .Columns(columns => {
        columns.Bound(o => o.Id);
        columns.Bound(o => o.Supplier);
        columns.Bound(o => o.Status);
        columns.Command(c => {
            c.Edit().Text(" ");
            c.Destroy().Text(" ");
        });
    })
    .DataSource(d => d
        .WebApi()
        .Model(m => m.Id(o => o.Id))
        .Create(c => c.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "Receipts" })))
        .Read(c => c.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "Receipts" })))
        .Update(c => c.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "Receipts", id = "{0}" })))
        .Destroy(c => c.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "Receipts", id = "{0}" })))
    )
    .ToolBar(toolbar => toolbar.Create())
    .Editable(e => e.Mode(GridEditMode.PopUp).TemplateName("Receipt"))
    .Deferred()
)

Автозаполнение (в шаблоне редактора):

@model Receipt

<div class="k-edit-label">@Html.LabelFor(m => m.Supplier)</div>
<div class="k-edit-field">
    @(Html.Kendo().AutoCompleteFor(m => m.Supplier)
        .Name("Supplier")
        .DataSource(s => {
            s.Read("Autocomplete", "Suppliers");
        })
        .DataTextField("Name")
        .MinLength(2)
    )
</div>

1 ответ

Решение

Попробуй это:

@(Html.Kendo().AutoComplete()
    .Name("Supplier")
    .DataSource(s => {
        s.Read("Autocomplete", "Suppliers");
    })
    .MinLength(2)
)

Измените AutoCompleteFor на Автозаполнение. Я использую автозаполнение в некоторых моих всплывающих окнах, и все работает нормально. Модель должна привязываться к.Name("Поставщик"), который должен совпадать со свойством объекта. Вам не нужно указывать анонимные типы.

Что касается чтения данных, я возвращаю список строк

Вот пример моего рабочего кода.

Пользовательское всплывающее окно:

@model Charts.Models.Machine

        @(Html.Kendo().AutoComplete()
    .Name("Grupa")
    .DataSource(source =>
    {
        source.Read(read =>
        {
            read.Action("GetGroups", "Helper");
        })
        .ServerFiltering(true);
    })
        )

Модель:

public class Machine
    {
        public virtual int ID { get; set; }
        [Required(ErrorMessage = "Pole Grupa nie może być puste.")]
        public virtual string Grupa { get; set; }

    }

Источник данных Читать:

public ActionResult GetGroups()
{
    IEnumerable<string> list = new GroupsRepository().Select().Select(x => x.Nazwa).Distinct();

    return Json(list, JsonRequestBehavior.AllowGet);
}
Другие вопросы по тегам