剑道自动完成中缺少DataValueField

时间:2019-02-04 07:21:53

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

我在MVC项目中使用kendo自动完成控制(服务器端过滤),它正确列出了数据。但是问题是当我将数据提交到服务器时,自动完成值ID丢失了。因为此控件中没有DataValueField属性。下面的代码是我正在使用的

@(Html.Kendo().AutoComplete()
    .Name("Patient")
    .Placeholder("Enter Name")
    .DataTextField("TextField")
    .Filter("contains")
    .MinLength(3)
    .HtmlAttributes(new { style = "width:100%" })
    .DataSource(source =>
    {
      source.Read(read =>
      {
         read.Action("function", "controller")
         .Data("onAdditionalData");
      })
         .ServerFiltering(true);
  })
)

如何将值发送到服务器。

谢谢..

1 个答案:

答案 0 :(得分:1)

由于AutoComplete帮助程序没有DataValueField属性,因此您需要使用其他HTML帮助程序作为解决方法来传递另一个属性值。假设您的视图模型具有以下设置:

public class ViewModel
{
    // ID property example
    public int PatientID { get; set; }

    // other properties
}

您可以创建一个隐藏字段或只读文本框来在Razor视图中存储上述ID属性:

@Html.HiddenFor(m => m.PatientID)

然后,通过创建从自动完成帮助程序读取项目索引的函数,从客户端脚本分配其value属性:

function selectPatient(e) {
    var item = this.dataItem(e.item.index());
    $('#PatientID').val(item.PatientID);
}

最后设置绑定到Events属性的函数名称:

@(Html.Kendo().AutoComplete()
    .Name("Patient")
    .Placeholder("Enter Name")
    .DataTextField("TextField")
    .Filter("contains")
    .MinLength(3)
    .HtmlAttributes(new { style = "width:100%" })

    // add this line
    .Events(ev => ev.Select("selectPatient"))

    .DataSource(source => {
        source.Read(read => {
            read.Action("function", "controller")
            .Data("onAdditionalData");
        })
        .ServerFiltering(true);
    })
)

通过此设置,PatientID属性应具有用户提交表单时从自动完成帮助器中选择的值的ID。