2009-12-24 2 views
0

У меня есть два текстовых поля jQuery autocomplete на веб-странице mvc. Тот, который возвращает список вопросов и другой, который возвращает список тегов.Два jQuery 'идентичных' автозаполнения текстовых полей, но только один работает

Текстовое поле вопросов работает отлично, но текстовое поле тегов отправляет пустую строку в свой контроллер.

Код JavaScript JQuery является точным совпадением кроме Url.Action, то не работает один показан ниже:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#searchTag').autocomplete('<%= Url.Action("AutoComplete", "Tags") %>', { 
      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].Name }; 
       } 
       return rows; 
      }, 
      formatItem: function(row) { 
       return row.Name; 
      }, 
      delay: 40, 
      autofill: true, 
      selectFirst: false, 
      highlight: false, 
      multiple: true, 
      multipleSeparator: ";" 
     }); 
    }); 
</script> 

тегах контроллер называется и возвращает данные JSON правильно, как я жестко закодированы 'b' для метода LookUpTag, но параметр строки t для автозаполнения всегда равен нулю.

public ActionResult AutoComplete(string t) 
    { 
     IQueryable<Tag> searchResults = tagRepository.LookUpTag("b"); 

     var data = (from searchResult in searchResults 
        select new { Id = searchResult.ID, Name = searchResult.Name }).ToList(); 
     return Json(data); 
    } 

Есть ли логическая причина для этого?

+0

Две вещи, которые я хотел бы сделать: 1) использовать Firebug или Fiddler, чтобы проверить, что URL запрашивается именно то, что я ожидал , 2) Убедитесь, что ваш маршрут MVC проходит через параметр правильно ... – Alconja

ответ

1

Единственное, что я вижу, это то, что ваш параметр в вашем действии называется t. Если вы используете this autocomplete plugin, то похоже, что значение поиска будет отправлено как параметр строки запроса с именем q (т. Е. Он запросит URL-адрес, например .../Tags/AutoComplete?q=b). Затем MVC попытается сопоставить этот параметр строки запроса с параметром вашего действия, также называемым q.

Так что может быть столь же просто исправить, как изменение подписи действий по:

public ActionResult AutoComplete(string q) 
+0

Абсолютно корректно, так как контроллер вопросов содержит общедоступный автозаполнение ActionResult (строка q) { IQueryable searchResults = questionRepository.LookUpQuestion (q); var data = (from searchResult in searchResults select new {Id = searchResult.QuestionID, Name = searchResult.QuestionTitle}). ToList(); возвращение Json (данные); } –

1
$('#searchTag') 

Поиск идентификатора возвращает только один элемент. Попробуйте использовать имя класса.

+0

Он показывает только сценарий для того, который не работает, поэтому я думаю, что он предназначен для ориентации на одну вещь по id (и, предположительно, есть другой идентичный скрипт нацеливание на другое поле также по id). – Alconja

+0

Хорошо, не уверен, как это сделать. Изменен код: $ ('. SearchForTag'). Autocomplete ('<% = Url.Action («Автозаполнение», «Теги»)%>',

+0

На обоих ваших входах вам нужно только имя класса, а не идентификатор. Итак: AND --- $ (' .searchForTag '). autocomplete (' <% = Url.Action («Автозаполнение», «Теги»)%> ', {...}) –

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