重新键入搜索字符串时,Kendo AutoComplete不会重新查询数据源

时间:2013-01-15 14:44:20

标签: kendo-ui

我遇到了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.."
    });

2 个答案:

答案 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"
                                }
                          }
                    }
            });

它适用于我。