Kendo UI网格编辑自定义控件 - 自动完成返回普通对象而不是复杂类型

时间:2014-07-15 05:50:20

标签: kendo-ui kendo-ui-mvc

我遇到网格单元格中自动完成自定义编辑器控件的绑定对象问题。

列的定义:

              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)选择现有元素: Debugging save event - complex type ok

2)之后我写了自由文本。在保存事件中,我们有简单的文本。

3)稍后我从列表中选择另一个现有产品并获得简单文本: Existing problem

自动完成控件将在此之后仅返回简单文本。

2 个答案:

答案 0 :(得分:0)

您需要将ISPrimitive设置为true才能获得选择中的text(DataTextField)值。如果您希望获得自动填充选择的整个对象,则需要将IsPrimitive设置为false。

  

获取自动完成选择设置为假的唯一文本部分

   .IsPrimitive(false) 
  

获取自动完成选择设置为True的整个对象

 .IsPrimitive(true) 

有关详细说明,请参阅示例。

<强> AutoComplete IsPrimitive Example

答案 1 :(得分:0)

我检查了这个提示但没有用。我需要整个对象,因为我必须使用“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))