2016-07-30 47 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); 
}