You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 2 MVC中JQuery Autocomplete下拉无数据显示问题

解决jQuery Autocomplete调用MVC控制器返回数据但下拉无显示的问题

我帮你分析下问题所在,你这情况其实是MVC控制器返回的JSON格式和JavaScript里的处理逻辑不匹配导致的——直接用本地数组正常说明Autocomplete组件本身没问题,问题出在AJAX响应的处理上。

核心问题:data.d的错误使用

你在JS的success回调里写了$.map(data.d, ...),但ASP.NET MVC的Action返回string[]时,响应的JSON是纯数组格式(比如["Bent","Boon",...]),并没有外层的d属性——d是ASP.NET WebForms的WebService才会自动添加的包装字段,MVC里不存在这个结构,所以data.d是undefined,自然没法生成下拉选项。

修复步骤

1. 修改AJAX成功回调的处理逻辑

把data.d改成直接使用data,因为返回的响应本身就是我们需要的数组:

success: function(data) {
    response($.map(data, function (item) {
        return { value: item }
    }));
},

2. (可选)优化AJAX请求的参数传递

你现在的控制器方法没有接收pre参数,手动拼接JSON字符串容易出错,建议用JSON.stringify来生成请求体,同时后续如果要实现模糊查询,可以给控制器添加参数:

修改后的控制器方法(支持模糊过滤):

using System.Linq;
using System.Collections.Generic;
using System.Web.Mvc;

public class HomeController : Controller
{
    public string[] GetPatientName(string pre) { 
        var names = new List<string> { "Bent","Boon","Book", "Al", "Cat", "Doe", "Ed", "Fox", "George" }; 
        
        // 如果输入为空则返回所有,否则按输入模糊匹配
        if (string.IsNullOrEmpty(pre))
            return names.ToArray();
        
        return names.Where(n => n.IndexOf(pre, StringComparison.OrdinalIgnoreCase) >= 0).ToArray(); 
    }
}

修改后的AJAX请求参数:

data: JSON.stringify({ pre: request.term }),

3. (可选)完善错误提示

可以在error回调里显示更详细的错误信息,方便排查:

error: function(XMLHttpRequest, textStatus, errorThrown) { 
    alert("请求出错:" + textStatus + " - " + errorThrown); 
}

验证方法

打开浏览器开发者工具(F12),切换到Network标签,触发Autocomplete请求后,查看该请求的响应内容,确认返回的是纯数组格式,而不是带d的对象,这样就能验证修复是否生效。

完整修改后的代码

JavaScript:

<script language="javascript" type="text/javascript"> 
$(function() { 
    $('#tags').autocomplete({ 
        source: function(request, response) { 
            $.ajax({ 
                url: "/Home/GetPatientName", 
                data: JSON.stringify({ pre: request.term }),
                dataType: "json", 
                type: "POST", 
                contentType: "application/json; charset=utf-8", 
                success: function(data) { 
                    response($.map(data, function (item) { 
                        return { value: item } 
                    })); 
                }, 
                error: function(XMLHttpRequest, textStatus, errorThrown) { 
                    alert("请求出错:" + textStatus + " - " + errorThrown); 
                } 
            }); 
        }, 
        delay: 0 
    }); 
}); 
</script>

HTML(无需修改):

<form> 
    <input id="tags" type="text" /> 
</form>

内容的提问来源于stack exchange,提问作者prospector

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:46:44