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

ASP.NET MVC中JQuery Autocomplete TextBox无法正常工作的排查请求

问题排查与修复方案

让我们一步步拆解这个自动补全失效的问题:

核心报错原因

你看到的Uncaught TypeError: this.source is not a function,本质是jQuery UI Autocomplete没有拿到有效的数据源地址——因为你的JS代码获取数据源URL的方式和HTML里的属性名不匹配,导致source参数为undefined,进而触发了这个错误。

具体修复步骤

1. 修正JS中获取数据源URL的代码

在你的MonScript.js里,当前用target.attr("data_autocomplete_source")去获取属性,但ASP.NET MVC会把Razor里的@data_autocomplete_source转换成HTML属性data-autocomplete-source(下划线自动转短横线)。所以你需要改成以下两种方式之一:

推荐方式(用jQuery的data()方法,自动处理命名转换):

$(function () {
    $("input[data-autocomplete-source]").each(function () {
        var target = $(this);
        var sourceUrl = target.data("autocompleteSource"); // 短横线转驼峰命名
        target.autocomplete({ source: sourceUrl });
    });
});

或者用attr()方法匹配正确的HTML属性名:

$(function () {
    $("input[data-autocomplete-source]").each(function () {
        var target = $(this);
        var sourceUrl = target.attr("data-autocomplete-source");
        target.autocomplete({ source: sourceUrl });
    });
});

2. 给AutoComplete控制器方法明确添加[HttpGet]标记

jQuery UI Autocomplete默认会发送GET请求到指定URL,虽然ASP.NET MVC的Action默认允许GET,但明确标注可以避免路由匹配的潜在问题:

[HttpGet] // 添加这个标记
public JsonResult AutoComplete(string term)
{
    var model = _repository.FetchGeneralStudentSearchResult(term);
    return Json(model, JsonRequestBehavior.AllowGet);
}

3. 确保返回的JSON格式符合jQuery UI要求

jQuery UI Autocomplete只接受两种格式的数据源:

  • 纯字符串数组:比如["张三", "李四", "赵六"]
  • 包含label和value属性的对象数组(label是下拉显示的文本,value是选中后填充到输入框的值):
    // 示例:如果你的Student实体有Name属性,返回这样的结构
    var result = _repository.FetchGeneralStudentSearchResult(term)
                            .Select(s => new { label = s.Name, value = s.Name });
    return Json(result, JsonRequestBehavior.AllowGet);
    

4. 检查脚本加载顺序与重复加载

确认你的页面没有重复加载jQuery或jQuery UI——如果布局页已经加载了jQuery,视图里的<script src="~/Scripts/jquery-3.3.1.js"></script>就需要删掉,重复加载会导致jQuery UI的绑定失效。当前你的脚本顺序是对的(先jQuery,再jQuery UI,再其他脚本),这部分没问题,但要避免重复引入。

验证修复

修改完成后,刷新页面,打开浏览器开发者工具的网络标签,在搜索框输入内容,你应该能看到发送到/Admin/AutoComplete的GET请求,并且返回了正确的JSON数据,自动补全下拉框也会正常显示。

内容的提问来源于stack exchange,提问作者L. Landenne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:36:23