我在调度程序编辑器模板中添加了自动填充功能。当我在文本框中输入第一个字符时,它返回正确的数据,但之后,不再调用读取操作(它不会到达控制器中的断点)并且似乎自动完成缓存了第一个字符输入的结果
例如,在数据库中,我有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调用从数据库加载数据。
有什么想法?感谢
答案 0 :(得分:0)
source.Read(read =>
{
read.Action("GetClientList", "Scheduler").Data("onAdditionalClientData");
}).ServerFiltering(true);
唯一需要更改的是添加ServerFiltering(true)。否则,它将执行一次Read操作并使用客户端过滤,这正是我所看到的。
也许Kendo可以稍微改进MVC的UI文档。