1

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

上面的代码旨在根据与子表的关系获取用户输入。如果用户输入与子表中的数据不匹配,则用户条目将保存到主数据库中的“其他”列。

控制器

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

对我的问题的任何见解都会有所帮助。

4

1 回答 1

1

自动完成只需要标签或带有值的标签。另一方面,您正在为整个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 个)。

于 2012-11-02T14:35:17.277 回答