jQuery UI 自动完成 : Menu does not show up

标签 jquery asp.net-mvc jquery-ui asp.net-mvc-3 autocomplete

我正在尝试使用自动完成小部件,该小部件通过 AJAX 请求从远程源获取数据。数据应作为 AddressController 上的 GetDistricts 操作方法的 JSON 结果出现。不幸的是,当我在文本框中键入内容时,菜单不会弹出。我检查了 Firebug 中的响应,一切似乎都正常: {"districtNames":["Beirut","Bekaa","Mount Lebanon","South","Nabatieh","North"]} 所以我真的不知道发生了什么.. .这是我的 jQuery 代码:

            district.autocomplete({
                minLength: 2,
                source: function (request, response) {
                    $.ajax({
                        type: "GET",
                        url: '@Url.Action("GetDistricts", "Address")',
                        dataType: "json",
                        success: function (data) {
                            response($.map(data, function (item) {
                                return {
                                    label: item.text,
                                    value: item.text
                                }
                            }))
                        }
                    })
                }
            });

这是我的操作方法:

    public ActionResult GetDistricts(string term)
    {
        var districts = _service.GetDistricts();
        var districtNames = from c in districts select c.Name;
        return Json(new {districtNames}, JsonRequestBehavior.AllowGet);
    }

P.S:我用本地数据尝试过,其中源是一个数组,效果很好。所以我不认为这与 CSS 有关...

最佳答案

Controller 操作的结果数组不是小部件期望的格式。自动完成需要一个字符串数组(或具有 valuelabel 属性的对象数组),而不是具有值是字符串数组的单个属性的对象。

您可以通过更新 Controller 操作来解决此问题:

public ActionResult GetDistricts(string term)
{
    var districts = _service.GetDistricts();
    var districtNames = from c in districts select c.Name;
    return Json(districtNames, JsonRequestBehavior.AllowGet);
}

如果您选择了这条路线,您甚至可以删除大量 $.ajax 代码,并让自动完成功能来处理它:

district.autocomplete({
    minLength: 2,
    source: '@Url.Action("GetDistricts", "Address")'
});

或者您可以在 $.ajax success 回调中稍微修改一下数据:

district.autocomplete({
    minLength: 2,
    source: function (request, response) {
        $.ajax({
            type: "GET",
            url: '@Url.Action("GetDistricts", "Address")',
            dataType: "json",
            success: function (data) {
                response($.map(data.districtNames, function (item) {
                    return {
                        label: item.text,
                        value: item.text
                    }
                }));
            }
        });
    }
});

请注意$.map 是通过 data.districtNames 调用的。

关于jQuery UI 自动完成 : Menu does not show up,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5851554/

相关文章:

html - 限制 twitter bootstrap 中进度条的宽度

javascript - 如何在提交时进行 ajax 调用并确保 html5 验证也发生

asp.net-mvc - 多重性与角色中的参照约束冲突

c# - 不显眼的日期时间? MVC4 中的验证

c# - 如何使用 Visual Studio 开发跨平台移动应用程序

jquery - 我可以在灯箱上显示警报框吗?

jquery - 获取动态创建的现有相同类名元素的 ID

javascript - 只显示一个类的第一次出现

jquery - 使用 jquery 获取所选选项的值

javascript - jQuery UI 单选按钮保持选中状态