在 ASP.NET MVC 错误中创建自动完成
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 自动完成插件将发送带有名为 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);
}
只是您必须将控制器中使用的参数命名为 "term",因为 jquery 自动完成小部件默认情况下会在名为 "term" 的变量中发送值.因此只需更改如下:
public 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);
}
我正在尝试使用 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 自动完成插件将发送带有名为 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);
}
只是您必须将控制器中使用的参数命名为 "term",因为 jquery 自动完成小部件默认情况下会在名为 "term" 的变量中发送值.因此只需更改如下:
public 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);
}