2016-07-30 10 views
1

Я пытаюсь создать текстовое поле автозаполнения в ASP.NET MVC, используя автозаполнение jquery.Создание автозаполнения в ошибке ASP.NET MVC

Это мой Index.cshtml:

<div class="autocomplete"> 
    @Html.TextBox("item", null, new { id = "autocomplete-textbox", @class = "form-control" }); 
    <input type="submit" value="Submit" id="autocomplete-button"/> 
</div> 

<script> 
    $(function() { 
     $('#autocomplete-textbox').autocomplete({ 
      source: '@Url.Action("AutoComplete")', 
      minlength: 1 
     }); 
    }); 
</script> 

И это мой метод домашнего контроллера:

public JsonResult AutoComplete(string item) 
    { 

     IEnumerable<string> itemsList = new[] { "Ana", "are", "mere", "pere", "papaia", "Aaa", "Ab", "An" }; 
     IEnumerable<string> filteredResults = null; 

     if (string.IsNullOrEmpty(item)) 
     { 
      filteredResults = itemsList; 
     } 
     else 
     { 
      filteredResults = itemsList.Where(s => s.IndexOf(item, StringComparison.InvariantCultureIgnoreCase) >= 0); 
     } 

     return Json(filteredResults, JsonRequestBehavior.AllowGet); 
    } 

Моя проблема заключается в том, что элемент параметра в JsonResult автозаполнения всегда нуль, и поэтому я всегда получайте в качестве ответа JSON весь список. Что я могу сделать ?

Спасибо, Маркус

ответ

0

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

Таким образом изменить действия сервера имя параметра метод term

public JsonResult AutoComplete(string term) 
{ 
    // use term for your checkings 
    // to do : Return something  
} 

Кроме того, я заметил еще одну проблему в коде. Если переменная term не пуста, вам нужно установить отфильтрованные результаты (результат вызова метода Where) в переменную filteredResults, потому что это то, что вы возвращаете.

if (string.IsNullOrEmpty(term)) 
{ 
    filteredResults = itemsList; 
} 
else 
{ 
    filteredResults = itemsList 
      .Where(s => s.IndexOf(term, StringComparison.InvariantCultureIgnoreCase) >= 0); 
} 
+1

Хорошо, спасибо большое. Это помогло. – Marcus

0

Только что вы должны назвать параметр как «термин», который вы используете в контроллере, а JQuery автозаполнения виджет по умолчанию отправляет значение в переменной с именем, как «термин». Поэтому просто изменить, как показано ниже:

общественного JsonResult автозаполнения (термин строка) {

IEnumerable<string> itemsList = new[] { "Ana", "are", "mere", "pere", "papaia", "Aaa", "Ab", "An" }; 
    IEnumerable<string> filteredResults = null; 

    if (string.IsNullOrEmpty(term)) 
    { 
     filteredResults = itemsList; 
    } 
    else 
    { 
     filteredResults = itemsList.Where(s => s.IndexOf(term, StringComparison.InvariantCultureIgnoreCase) >= 0); 
    } 

    return Json(filteredResults, JsonRequestBehavior.AllowGet); 
} 

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

  • Нет связанных вопросов^_^