使用 jQuery UI 的自动完成功能返回 ArgumentNullException



我正在尝试在搜索栏中放置一个简单的自动完成功能 在一个 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">

最新更新