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