2016-07-30 50 views
1

我正在嘗試使用jquery自動完成在ASP.NET MVC中創建一個自動完成文本框。在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的自動完成插件將發送鍵入值與查詢字符串PARAM稱爲term,沒有項目(你可以看到這一點,如果你打開你的瀏覽器開發工具 - >網絡標籤)。

所以更改服務器的操作方法參數名term

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

而且,我在你的代碼注意到另一個問題。如果術語變量不爲空,則需要將篩選結果(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); 
}