2

サーバー フィルタリングで Kendo UI Autocomplete コントロールを使用しようとしていますが、問題が発生しました。

コールバック関数はフォームから正しいテキストを取得しているように見えますが、一貫して null をコントローラー メソッドに渡します。私のコードがサンプル コードと大きく異なる点はわかりません。JavaScript が呼び出され、目的のコントローラー メソッドが呼び出されていることを確認しました。後者は、単に JavaScript メソッドから値を受け取っていません。

私は何が欠けていますか?

.cshtml ソース:

@(Html.Kendo().AutoComplete()
    .Name("CustomerIdAutocomplete")
    .DataTextField("CustomerId")
    .MinLength(3)
    .HtmlAttributes(new { style = "width:250px" })
    .DataSource(source => {
        source.Read(read =>
        {
            read.Action("AutocompleteCustomer", "Autocomplete")
                .Data("onAdditionalData");
        })
        .ServerFiltering(true);
    })
)

Javascript:

function onAdditionalData() {
    return {
        text: $("#CustomerIdAutocomplete").val()
    };
}

コントローラーの方法:

public ActionResult AutocompleteCustomer(string term)
{
    InformixRepository informixRepository = new InformixRepository();
    IList<AutocompleteCustomer> customers = informixRepository.GetMatchingCustomerIds(term);
    return Json(customers, JsonRequestBehavior.AllowGet);
}

リポジトリの方法:

public IList<AutocompleteCustomer> GetMatchingCustomerIds(string text)
{
    .... content omitted because "text" is already null at this point
}
4

1 に答える 1

3

これで修正されるはずです:

function onAdditionalData() {
    return {
        term: $("#CustomerIdAutocomplete").val()
    };
}

JavaScript で使用するものはすべて、呼び出したアクションのパラメーターと同じである必要がありますterm

public ActionResult AutocompleteCustomer(string term)
{
    InformixRepository informixRepository = new InformixRepository();
    IList<AutocompleteCustomer> customers = informixRepository.GetMatchingCustomerIds(term);
    return Json(customers, JsonRequestBehavior.AllowGet);
}
于 2015-06-02T21:13:58.773 に答える