我遇到了Kendo AutoComplete小部件的问题。
我试图在用户输入搜索的前两个字符后查询数据源。 在服务器(web api)上,我使用这两个字符限制搜索,一切都很好,即如果我继续在搜索中输入,则返回并正确显示子集并进一步过滤。
但是,然后我重新键入了一个新的搜索条目,不再向数据源发送,因此我不知道从第一个查询中检索到的数据。
我该怎么做呢?
由于
这是我的测试代码:
public class AlbumsController : ApiController
{
HttpRequest _request = HttpContext.Current.Request;
// GET api/albums
public IEnumerable<Album> GetForAutoComplete()
{
string sw = _request["sw"] == null ? "" : _request["sw"].ToString();
var query = (from a in Albums.MyAlbums
where a.Title.ToLower().StartsWith(sw)
orderby a.Title
select a).ToArray();
return query;
}
我在客户端的javascript是这样的:
var dataSource = new kendo.data.DataSource({
transport: {
read: {
url: "/api/Albums/GetForAutoComplete",
data: {
sw: function () {
return $("#albumSearch").data("kendoAutoComplete").value();
}
}
}
}
});
$("#albumSearch").kendoAutoComplete({
dataSource: dataSource,
dataTextField: "Title",
minLength: 2,
placeholder: "type in here.."
});
答案 0 :(得分:4)
将serverFiltering设为true。默认值为false,因此它只会获取一次数据并假设它现在拥有所有数据,并且后续过滤在客户端上完成。 要让它每次都重新发送到服务器,请添加:
var dataSource = new kendo.data.DataSource({
serverFiltering: true, // <-- add this line.
transport: {
...
}
});
答案 1 :(得分:0)
使用数据库中的kendo自动填充键入时选择欧洲国家/地区的代码,如下所示:
$("#countries").kendoAutoComplete({
dataTextField: "yourfield",
filter: "startswith", // or you can use filter: "contains",
minLength: 3, //what ever you want. In my case its 0.
placeholder: "Select country...",
dataSource: {
type: "get",
serverFiltering: true, //or can also make it false
transport: {
read: {
url: "/yourController/yourAction",
datatype: "json"
}
}
}
});
它适用于我。