Как правильно связать автозаполнение в сетке Kendo MVC

У меня есть поле автозаполнения для имен внутри сетки контактов.

Пользователь должен иметь возможность ввести имя, выбрать его из списка, а остальные контактные данные будут заполнены автоматически. Это работает правильно.

Однако пользователь также должен иметь возможность вручную вводить данные о человеке, которого нет в списке, а также сохранять их. Это НЕ происходит. После того, как поле имени потеряет фокус, значение останется. После сохранения значение исчезает, так как оно неправильно привязано к столбцу.

Я последовал совету (вариант 1, поскольку я бы предпочел не использовать ViewData) в этом ответе, но не могу получить значения для правильной привязки.

Если я назову виджет автозаполнения так же, как поле столбца, автозаполнение не будет работать, поле будет обычным текстовым полем. Если я назову виджет автозаполнения другим именем, поле ввода станет полем автозаполнения с именем виджета, но не привяжет данные к столбцу.

Объявление столбца

      .Columns(columns =>
      {
          columns.Bound(e => e.Name).EditorTemplateName("NameLookupConcatenated");
          columns.Bound(e => e.Phone);
          columns.Bound(e => e.Email);
          columns.Command(command => { command.Edit(); command.Destroy(); });
      })

Модель сетки

    public int ID { get; set; }
    public string Name { get; set; }
    public string Phone { get; set; }
    public string Email { get; set; }

Автозаполнение

@model string

@(Html.Kendo().AutoComplete()
    .Name("concatenated")
    .DataTextField("Concatenated")
    .Filter("contains")
    .DataSource(source => source.Read(read => read.Action("GetUserInfo", "Contacts")
        .Data("onAdditionalData"))
        .ServerFiltering(true))
        .Events(e => e.Select("onUserSelect"))
)

Автозаполнение модели

    public string Email { get; set; }
    private string FirstName { get; set; }
    private string LastName { get; set; }
    public string Concatenated
    {
        get { return string.Format("{0} {1}", FirstName, LastName); }
    }
    public string TelePhoneNo { get; set; }

person user3738893    schedule 14.01.2015    source источник


Ответы (1)


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

Мой рабочий код:

.Columns(columns =>
      {
          columns.Bound(e => e.ConcatName).EditorTemplateName("NameLookupConcatenated"); //changed name here
          columns.Bound(e => e.Phone);
          columns.Bound(e => e.Email);
          columns.Command(command => { command.Edit(); command.Destroy(); });
      })

Изменено имя столбца выше и установлено свойство «Имя» в автозаполнении, чтобы оно соответствовало имени столбца.

@(Html.Kendo().AutoComplete()
.Name("ConcatName")
.DataTextField("Concatenated")
.Filter("contains")
.DataSource(source => source.Read(read => read.Action("GetUserInfo", "Contacts")
    .Data("onAdditionalData"))
    .ServerFiltering(true))
    .Events(e => e.Select("onUserSelect"))
)
person user3738893    schedule 15.01.2015