我正在尝试在搜索栏中放置一个简单的自动完成功能 在一个 ASP.Net 的网站中,但每次我在字段中输入时,我都会得到一个系统参数空异常:"值不能为空。
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);
}
感谢任何评论。
这个答案可能不会解决你的参数 null 异常,但我在你的代码中看到了一些其他问题,想给你一个提示。
使用当前代码,自动完成方法将调用终结点,并使用查询字符串传递输入的值term
例如 :/Home/Autocomplete/?term=camera
因此,请将操作方法参数更改为term
。此外,如果您的Autocomplete
操作方法是 GET 类型,并且您尝试从中返回 JSON,则需要使用将JsonRequestBehavior
枚举作为第二个参数Json
方法的重载。(对于 .net 核心版本,不需要执行此操作(
public ActionResult Autocomplete(string term)
{
var items = repository.Products
.Where(p => p.Name.ToLower().Contains(term));
return Json(items, JsonRequestBehavior.AllowGet);
}
此外,如果您使用的是 .net core 应用程序,则无需调用lower
方法,而是使用String.Contains
方法重载,该方法将StringComparison
枚举作为第二个参数。这将适用于不区分大小写的搜索。
public ActionResult Autocomplete(string term)
{
var items = repository.Products
.Where(p => p.Title
.Contains(term,
StringComparison.OrdinalIgnoreCase)
);
return Json(items);
}
在 html 中启用自动完成功能并使用绝对网址"http://domain/path">