AutoComplete控制调用具有空值的控制器

时间:2015-06-02 02:16:25

标签: c# asp.net-mvc kendo-ui kendo-asp.net-mvc kendo-autocomplete

我正在尝试使用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
}

1 个答案:

答案 0 :(得分:2)

这应该解决它:

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