我正在尝试在搜索栏中添加一个简单的自动完成功能 在ASP.Net网站中,但是每次我在该字段中键入时,都会得到一个System ArgumentNullException:'值不能为null。用于变量searchString。
Javascript:
$(document).ready(function () {
$('#autocomplete').autocomplete({
source: '/Home/Autocomplete/'
});
});
HTML:
<input type="text" name="searchString" autocomplete="off" id="autocomplete" class="ui-autocomplete-input" placeholder="Search..." />
方法:
public ActionResult Autocomplete(string searchString)
{
var items = repository.Products.Where(p => p.Name.ToLower().Contains(searchString));
return Json(items);
}
赞赏任何评论。
答案 0 :(得分:0)
在html中放入自动完成功能,并使用绝对网址“ http://domain/path”
答案 1 :(得分:0)
此答案可能不会解决您的参数null异常,但是我在您的代码中看到了其他一些问题,并希望对此有所了解。
使用您当前的代码,自动完成方法将调用您的端点,并使用查询字符串term
Ex:/Home/Autocomplete/?term=camera
因此将您的操作方法参数更改为term
。另外,如果您的Autocomplete
操作方法是GET类型,并且您尝试从中返回JSON,则需要使用Json
方法的重载,该方法将JsonRequestBehavior
枚举作为第二个参数。 (对于.net核心版本,您不需要这样做)
public ActionResult Autocomplete(string term)
{
var items = repository.Products
.Where(p => p.Name.ToLower().Contains(term));
return Json(items, JsonRequestBehavior.AllowGet);
}
此外,如果您正在使用.net核心应用程序,则无需调用lower
方法,而应使用String.Contains
方法重载,该重载将StringComparison
枚举作为第二个参数。这将适用于不区分大小写的搜索。
public ActionResult Autocomplete(string term)
{
var items = repository.Products
.Where(p => p.Title
.Contains(term,
StringComparison.OrdinalIgnoreCase)
);
return Json(items);
}