2016-07-30 6 views
1

Ich versuche, ein Autocomplete-Textfeld in ASP.NET MVC mithilfe von Jquery Autocomplete zu erstellen.Erstellen eines Autocomplete in ASP.NET MVC-Fehler

Das ist mein 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> 

Und das ist mein Zuhause Controller-Methode: Ich

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

Mein Problem ist, dass der Parameter Element in dem JsonResult Auto-Vervollständigen immer null ist und so bekomme immer als JSON Antwort die ganze Liste. Was kann ich tun ?

Danke, Marcus

Antwort

0

Standardmäßig wird das jQuery Autocomplete-Plugin den eingegebenen Wert mit einem Query-String param senden term genannt, nicht Artikel (du sehen können, wenn Sie Ihren Browser-Tools öffnen dev -> Netzwerkreiter).

So Server Aktion-Methode Parameternamen auch auf term

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

ändern, bemerkte ich ein anderes Problem in Ihrem Code. Wenn die Laufzeitvariable nicht leer ist, müssen Sie die gefilterten Ergebnisse (das Ergebnis Ihres Where-Methodenaufrufs) auf die Variable filteredResults setzen, da dies das ist, was Sie zurückgeben.

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

In Ordnung, ich danke Ihnen sehr. Das hat geholfen. – Marcus

0

Nur, dass Sie den Parameter als „Ausdruck“ nennen, die Sie in Ihrem Controller verwenden, wie Jquery Autocomplete-Widget standardmäßig den Wert in einer Variablen sendet als „Ausdruck“ genannt. Daher nur wie unten ändern:

öffentliche JsonResult Auto-Vervollständigen (string term) {

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); 
} 
Verwandte Themen