ASP.NET MVC和编程的新事物,我已经在此主题上搜索了材料,但还没有找到我的特定问题的具体答案。
我正在从事的项目需要使用WCF服务。最初,我从有效的jQuery自动完成功能开始,但是将代码转移到WCF服务已打破了一些通信。自动完成功能不再起作用
WCF服务
public IList<Location> QuickSearchLocation(string term)
{
using (var db = new InspectionEntities())
{
//return all locations except the reserved "Other"
return db.Locations
.Where(r => r.LocationName.Contains(term) && r.LocationId != Constants.OtherId)
.ToList();
}
}
上面的代码旨在根据与儿童表的关系获取用户输入。如果用户输入在子表中与数据不匹配,则将用户条目保存到主DB中的"其他"列。
控制器
public ActionResult QuickSearchLocation(string term)
{
return Json(_service.QuickSearchLocation(term), JsonRequestBehavior.AllowGet);
}
查看
div class="editor-field">
@Html.TextBoxFor(m=>m.LocationId,new {data_autocomplete = Url.Action("QuickSearchLocation", "Inspection")})
脚本
$(document).ready(function () {
$(":input[data-autocomplete]").each(function () {
$(this).autocomplete({ source: $(this).attr("data-autocomplete")});
});
对我的问题的任何见解都会有所帮助。
自动完成期望仅具有值的标签。另一方面,您正在为其服务整个Location
对象。
因此,您应该创建一个助手类:
public class AutocompleteLocation{
public AutocompleteLocation(Location location){
label = location.LocationName;
value = location.LocationId;
}
public string label {get;set;}
public string value {get;set;}
}
之后,您应该更改QuickSearchLocation
控制器方法:
public ActionResult QuickSearchLocation(string term)
{
return Json(_service.QuickSearchLocation(term).Select(l => new AutocompleteLocation(l)).ToList(), JsonRequestBehavior.AllowGet);
}
您还应该考虑不返回所有结果,而是只有前几个(例如10)。