2

我试图使用Kendo UI自动完成控件与服务器筛选,但已遇到问题。自动完成控制空值调用控制器

尽管我的回调函数似乎从表单中提取正确的文本,但它始终将空值传递给控制器​​方法。我看不到任何重要的方式,我的代码与示例代码不同。我已经验证了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

是自动完成的代码你”重新使用?数据源指向'AutocompleteCustomer',而不是'GetMatchingCustomerIds' – Nicholas

+0

你能显示你的ajax调用错误信息 –

+0

@Nicholas - 好。忘记了我已经将DB代码重构为一个存储库。我已经添加了实际的控制器方法 - 每次仍然为“text”调用null。 –

回答

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

我发誓我看了那1000次。谢谢! –