如何在Kendo网格MVC中正确绑定自动完成

时间:2015-01-14 21:35:04

标签: c# asp.net-mvc kendo-ui kendo-grid kendo-autocomplete

我在联系人网格中有名称的自动填充字段。

用户应该能够键入名称,从列表中选择一个名称,并自动填充其他联系人详细信息。这工作正常。

但是,用户还应该能够手动输入不在列表中的人员的详细信息并将其保存。这不会发生。名称字段失去焦点后,值仍然存在。保存后,该值将消失,因为它未正确绑定到列。

我已经在this回答中遵循了建议(选项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; }

1 个答案:

答案 0 :(得分:0)

我发现页面上已经有一个输入元素,ID为#34; Name"。当网格处于编辑模式并且自动完成没有附加到正确的元素时,这会导致id的重复。

我的工作代码:

.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"))
)