4

我对 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.."
    });
4

2 回答 2

5

serverFiltering设置为 true。默认是false,所以它只会抓取一次数据,并假设它现在已经拥有了所有的数据,随后的过滤是在客户端完成的。要让它每次都重新发送到服务器,请添加:

var dataSource = new kendo.data.DataSource({
    serverFiltering: true, // <-- add this line.
    transport: {
        ...
    }
});
于 2013-01-15T14:58:54.777 回答
0

使用数据库中的剑道自动完成输入时选择欧洲国家的代码如下:

$("#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"
                                }
                          }
                    }
            });

这对我来说可以。

于 2015-08-20T06:56:22.503 回答