Kendo UI中的自动完成功能MVC调度程序编辑器模板无效

时间:2016-06-02 16:26:50

标签: kendo-ui autocomplete kendo-asp.net-mvc

我在调度程序编辑器模板中添加了自动填充功能。当我在文本框中输入第一个字符时,它返回正确的数据,但之后,不再调用读取操作(它不会到达控制器中的断点)并且似乎自动完成缓存了第一个字符输入的结果

例如,在数据库中,我有2000个客户端名称。其中100名以'a'开头。当编辑器从调度程序启动时,我输入'a',它显示100个名字。然后,我删除'a',输入'c'。什么都没有显示,但我有200个名字以'c'开头。而这一次,它没有达到控制器的断点。

以下是编辑器模板中的自动完成功能:

<div data-container-for="client" class="k-edit-field">
 @(Html.Kendo().AutoComplete()
    .Name("client")
    .DataTextField("ClientName")        
    .Placeholder("Please fill in Name")     
    .DataSource(source =>
        {
            source.Read(read =>
            {
                read.Action("GetClientList", "Scheduler").Data("onAdditionalClientData");
            });
        })      
    .HtmlAttributes(new { style="width:100%" })     
    .MinLength(1)       
    .Height(300)
    )
</div>

调度程序在index.cshtml中,我将javascript放在index.cshtml中。如果我把它放在模板文件中,则显示错误。

<script>
    function onAdditionalClientData() {
        return {
            query: $("#client").val()
        };
    }
</script>

在控制器中,我有

public JsonResult GetClientList(string query)
{
    ....
    var ret = doctors.OrderBy(x => x.Name).Take(20).ToList();
    return Json(ret, JsonRequestBehavior.AllowGet);
}

我搜索过,似乎我们可以在调度程序编辑模板中使用自动完成功能。但我能找到的所有示例代码都是针对Kendo UI并从静态列表中加载数据。我需要使用Json调用从数据库加载数据。

有什么想法?感谢

1 个答案:

答案 0 :(得分:0)

噢,好吧,想通了。

source.Read(read =>
{
    read.Action("GetClientList", "Scheduler").Data("onAdditionalClientData");
}).ServerFiltering(true);

唯一需要更改的是添加ServerFiltering(true)。否则,它将执行一次Read操作并使用客户端过滤,这正是我所看到的。

也许Kendo可以稍微改进MVC的UI文档。