Пользовательский элемент управления сетки пользовательского интерфейса Kendo - автозаполнение возвращает простой объект вместо сложного типа

У меня проблема с привязкой объекта из автозаполнения пользовательского элемента управления редактора в ячейке сетки.

Определение по столбцу:

              columns.Bound(p => p.Product)
              .EditorTemplateName("Products")
              //.ClientTemplate("#= Product.Name != undefined ? Product.Name : '' #")
              .Width(160);

Контроль определения в представлении Products.cshtml:

@(Html.Kendo().AutoCompleteFor(m => m)
  .DataTextField("Name")

  .DataSource(ds => 
      ds.ServerFiltering(true).Read(read => read.Action("GetProducts", "Product")))
  .Placeholder(View.BaseDocumentItemDetails_Placeholder)
  .IgnoreCase(true)
  .MinLength(2)
  .Suggest(true)

      .Events(ev =>
      {
         // ev.Select("SelectProductName");
         // ev.Change("ChangeProductName");
      })
  .Filter(FilterType.Contains))

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

1) Выберите существующий элемент: отладка сохранения события - сложный тип ок

2) После этого я написал свободный текст. В случае сохранения у нас есть простой текст.

3) Позже я выбираю другой существующий продукт из списка, а также получаю простой текст: Существующая проблема

После этого управление автозаполнением вернет только простой текст.

2 ответа

Вам нужно установить ISPrimitive как true, чтобы получить только текстовое (DataTextField) значение в выделении. Если вы хотите получить весь объект выбора автозаполнения, вам нужно установить IsPrimitive как false.

Чтобы получить только текстовую часть из набора автозаполнения False

   .IsPrimitive(false) 

Чтобы получить весь объект из набора автозаполнения True

 .IsPrimitive(true) 

Смотрите пример для более подробного объяснения.

Пример автозаполнения IsPrimitive

Я проверил этот совет, но не работал. Мне нужен весь объект, потому что я должен использовать товар "Id" и "Name". Ниже приведено определение управления автозаполнением с использованием пользовательского редактирования в ячейке сетки:

@(Html.Kendo().AutoCompleteFor(m => m)
  .DataTextField("Name")

  .DataSource(ds => 
      ds.ServerFiltering(true).Read(read => read.Action("GetProducts", "Product")))
  .Placeholder(View.BaseDocumentItemDetails_Placeholder)
  .IgnoreCase(true)
  .ValuePrimitive(false)
  .MinLength(2)
  .Suggest(true)

      .Events(ev =>
      {
         // ev.Select("SelectProductName");
         //ev.Change("ChangeProductName");
      })
  .Filter(FilterType.Contains))
Другие вопросы по тегам