jQuery UI自动完成返回ArgumentNullException

时间:2018-08-25 18:22:38

标签: asp.net-mvc jquery-ui

我正在尝试在搜索栏中添加一个简单的自动完成功能 在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);
    }

赞赏任何评论。

2 个答案:

答案 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);
}