[英]Creating an autocomplete in ASP.NET MVC error
我试图使用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 AutoComplete中的参数项始终为null,因此我总是得到整个列表的JSON响应。 我能做什么 ?
谢谢,马库斯
默认情况下,jQuery auto complete插件将使用名为term
的查询字符串参数发送输入的值,而不是item( 如果打开浏览器开发工具 - >网络选项卡,则可以看到此信息 )。
因此,将服务器操作方法参数名称更改为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);
}
只是你必须将参数命名为你在控制器中使用的“术语”,因为默认情况下jquery autocomplete小部件会在名为“term”的变量中发送值。 因此,只需更改如下:
public JsonResult AutoComplete(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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.