Автозаполнение не работает в моем asp.net MVC - PullRequest
2 голосов
/ 12 февраля 2012

У меня есть следующий метод репозитория для поиска пользователей, содержащий параметр поиска: -

public IEnumerable<User> searchusers2(string q)
    {
        return from u in entities1.Users
               where (u.UserID.Contains(q) || string.IsNullOrEmpty(q))
               select u;
           }

, который называется suing для следующего метода действия: -

public ActionResult QuickSearch(string term)
       {
           var users = r.searchusers2(term);
           users.Select(a => new { value = a.UserID });
           return Json(users, JsonRequestBehavior.AllowGet);
}

и напосмотрите, у меня есть следующий код: -

@using (Ajax.BeginForm("Search", "User", new AjaxOptions
{
    HttpMethod = "POST",
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "searchResults",
   LoadingElementId = "progress"
}))
{

     <input type="text" name="q" data-autocomplete-source="@Url.Action("QuickSearch", "User")" />
     <input type="hidden" name="classid" value="@ViewBag.classid"/>



     <input type="submit" value="Search" />
}

приведенный выше код не работает, но если я изменю свой метод действия на следующий (без использования репозитория для выполнения поиска), тогда будет работать автозаполнениехорошо ,,, так что может быть причиной этой проблемы: -

public ActionResult QuickSearch(string term)
       {
                                 var users = entities1.Users
               .Where(e => e.UserID.Contains(term))
               .Select(r => new {value = r.UserID });
            return Json(users, JsonRequestBehavior.AllowGet);

       }

1 Ответ

1 голос
/ 12 февраля 2012

В версии репозитория вы возвращаете весь объект User в Json. Select in

public ActionResult QuickSearch(string term)
{
           var users = r.searchusers2(term);
           users.Select(a => new { value = a.UserID });
           return Json(users, JsonRequestBehavior.AllowGet);
}

ничего не делает, потому что вы не сохраняете возвращенные значения, вы либонеобходимо объединить вызов в цепочку, например:

public ActionResult QuickSearch(string term)
{
           var users = r.searchusers2(term).Select(a => new { value = a.UserID });
           return Json(users, JsonRequestBehavior.AllowGet);
}

или использовать отдельную переменную:

public ActionResult QuickSearch(string term)
{
           var users = r.searchusers2(term);
           var values = users.Select(a => new { value = a.UserID });
           return Json(values, JsonRequestBehavior.AllowGet);
}
...