具有空值的自动完成控件调用控制器

AutoComplete control calling controller with null value

我正在尝试将 Kendo UI 自动完成控件与服务器过滤一起使用,但是 运行 遇到了问题。

虽然我的回调函数似乎从表单中提取了正确的文本,但它始终将 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
}

这应该可以解决问题:

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);
}