繁体   English   中英

在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 auto complete插件将使用名为term的查询字符串参数发送输入的值,而不是item( 如果打开浏览器开发工具 - >网络选项卡,则可以看到此信息 )。

因此,将服务器操作方法参数名称更改为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);
}

只是你必须将参数命名为你在控制器中使用的“术语”,因为默认情况下jquery autocomplete小部件会在名为“term”的变量中发送值。 因此,只需更改如下:

public JsonResult AutoComplete(string term){

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM