与WCF服务ASP.NET MVC绑定的jQuery自动完成



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)。

最新更新