2

我正在尝试将 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
}
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 回答