4

Kendo AutoComplete ウィジェットに問題があります。

ユーザーが検索の最初の 2 文字を入力した後、データソースを照会しようとしています。サーバー (web api) で、これらの 2 つの文字を使用して検索を制限すると、すべてうまくいきます。つまり、検索を入力し続けると、サブセットが返され、正しく表示され、さらにフィルター処理されます。

ただし、新しい検索エントリを再入力すると、データソースに返されなくなったため、最初のクエリから取得したデータに固執します。

これを適切に行うにはどうすればよいですか?

ありがとう

ここに私のテストコードがあります:

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 に答える