2010-12-14 2 views
1

Я создаю поле автозаполнения в ASP.net MVC 2. Проблема заключается в том, что поле ввода просто закручивается, и нет данных автозаполнения или сообщений «без результатов».Результаты автозаполнения JQuery не отображаются

У меня есть контроллер поиска, который извлекает LastNames из базы данных с помощью инструкции LIKE. Этот контроллер вызывается из функции JavaScript ниже:

$('#author').autocomplete('~/edit/search.mvc', { 
    delay: 200, 
    minChars: 2 
}); 

Это все работает нормально. Я могу отлаживать контроллер поиска и передавать текст поиска (q) и получать результаты до конца в оператор return. Контроллер находится ниже.

//Method to return author searches 
public JsonResult Search(string q) 
{ 
    var locateFacultyDto = new LocateFacultyMemberDto() { SearchText = q }; 
    var result = _facultyMemberModel.LocateFacilityMembersByLastNameLike(locateFacultyDto, 10); 

    var lastNames = new List<string>(); 

    foreach (var facultyMember in result.FacultyMembers) 
    { 
     lastNames.Add(facultyMember.LastName); 
    } 


    return Json(lastNames, JsonRequestBehavior.AllowGet); 
} 

Но тогда на странице HTML (Spark) результатов не найдено. У меня действительно простой ввод текста:

<input id="author" type="text" /> 

Любые идеи? Я не могу отлаживать дальше, чем конец контроллера Search, но все кажется хорошим до этого момента.

+0

Я не могу помочь вам с ASP, но попробовали ли вы использовать отладчик в Chrome/FF, чтобы узнать, что вы, собственно, переписываете, через AJAX? – Fred

ответ

1

Хорошо, я понял это благодаря следующему сообщению и комментарии выше:

http://blogs.msdn.com/b/joecar/archive/2009/01/08/autocomplete-with-asp-net-mvc-and-jquery.aspx

Проводка полученного кода в случае, если это помогает кому-то еще.

Javascript: Это вызывает метод «Поиск» в контроллере «Редактировать» (подробнее см. Ниже). Добавление функции «Анализ» - это ключ, который поясняется в приведенной выше ссылке:

Хитрость заключается в преобразовании этих данных в формат, который ожидает функция автозаполнения. Если вы используете локальные данные, автозаполнение ожидает массив строк. Поскольку наши данные представлены в виде объекта JSON, мы будем использовать параметр parse для форматирования нашего объекта JSON в данные, с которыми может работать функция автозаполнения.

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

  1. данные: это целая вещь в моей JSON объект: { "ID": 13, "Название": "test3", "Count": 1}

  2. значение: это значение Я хочу показать: test3

  3. результат: это значение Я хочу добавить свой вклад (txtStoryTags) после выбора тега fr ом раскрывающийся: test3

Полная функция JavaScript:

$('#author').autocomplete('~/edit/search.mvc', { 
    dataType: 'json', 
    parse: function(data) { 
     var rows = new Array(); 
     for (var i = 0; i < data.length; i++) { 
     rows[i] = {data: data[i], value: data[i].Name, result: data[i].Id }; 
    } 
     return rows; 
    }, 
    formatItem: function(row) { 
    return row.Name; 
    }, 
delay: 40, 
autofill: true, 
selectFirst: false, 
highlight: false, 
minChars: 2 
}); 

ASP.net MVC 2 контроллера:

//Method to return author search results as JSON 
    public JsonResult Search(string q) //autocomplete passes a variable 'q' containing the search text 
    { 
     var locateFacultyDto = new LocateFacultyMemberDto() { SearchText = q }; 
     var authors = _facultyMemberModel.LocateFacilityMembersByLastNameLike(locateFacultyDto, 10); 

     var results = new List<Object>(); //All we need is the name and ID 
     //anonymnous object for JSON result. 
     foreach (var author in authors.FacultyMembers) 
     { 
      results.Add(new 
      { 
       Name = (author.LastName + ", " + author.FirstNames), 
       Id = author.Id 
      }); 
     } 

Viola!Автозаполнение перечисляет имена пользователей в результатах поиска, а также при выборе имени вставляет идентификатор в поле, которое просто:

<input id="author" type="text" /> 

Спасибо всем!

1

Я бы предложил использовать firebug в firefox, чтобы посмотреть, что такое реальный ответ.

+0

Если я вытащил LastNames в конструкторе поиска и передал массив строк, разделенных «\ n», то он отлично работает. В идеале было бы неплохо передать имя и идентификатор. – Ian

+0

Так что проблема возникает, когда я возвращаю JSON, который подтверждает Firebug, прибывает нормально. Если я верну JSON, содержащий ИМЯ и ИД, то есть ли способ, чтобы НАЗВАНИЕ появилось в автозаполнении, и идентификатор будет сохранен где-нибудь, как в скрытом поле? – Ian

Смежные вопросы