jQueryUI AutoComplete不会将结果呈现给输入框

时间:2013-10-28 11:42:05

标签: c# asp.net jquery-ui jquery autocomplete

尝试使用 JQueryUI 实现对Windows用户帐户的简单搜索。

要求用户输入HTML <input>控件的名字或姓氏,该名称应该返回该名称与该搜索项目的所有可能匹配的全名和(用户名)。虽然服务器返回结果如下:

enter image description here

问题<input>框显示搜索字词,并显示没有选项的“白色”下拉列表。 enter image description here

JQuery 代码:

                        $(document).ready(function () {
                        $("#nameSearch").autocomplete({
                            source: function (request, response) {
                                $.ajax({
                                    type: "POST",
                                    contentType: "application/json; charset=utf-8",
                                    url: "Search.aspx/GetUserDetails",
                                    data: "{'username':'" + request.term + "'}",
                                    dataType: "json",
                                    async: true,
                                    success: function (data) {
                                        response($.map(data, function (item) {
                                            return {
                                                value: item.username
                                            }
                                        }));

                                    },
                                    error: function (xhr, textStatus, errorThrown) {
                                        var errorMessage = "Ajax error: " + this.url + " textStatus: " + textStatus + " errorThrown: " + errorThrown + "  xhr.statusText: " + xhr.statusText + " xhr.status: " + xhr.status;
                                        alert(errorMessage);
                                        if (xhr.status != "0" || errorThrown != "abort") {
                                            alert(xhr.responseText);
                                        }
                                    }
                                });
                            }
                        });
                    });

代码

[WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static Person[] GetUserDetails(string username)
    {
        List<Person> allUsers = new List<Person>();

        PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "abcd",
        "dc=abcdH,dc=com");

        UserPrincipal qbeUser = new UserPrincipal(ctx);

        qbeUser.GivenName = username;

        PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
        foreach (var found in srch.FindAll())
        {
            Person user = new Person();
            user.userDetails = found.DisplayName + " (" + found.SamAccountName + ")";
            allUsers.Add(user);
        }
        qbeUser = null;
        qbeUser = new UserPrincipal(ctx);

        qbeUser.Surname = username;

        PrincipalSearcher srch1 = new PrincipalSearcher(qbeUser);
        foreach (var found in srch1.FindAll())
        {
            Person user = new Person();
            user.userDetails = found.DisplayName + " (" + found.SamAccountName + ")";
            allUsers.Add(user);
        }
        qbeUser = null;
        qbeUser = new UserPrincipal(ctx);

        qbeUser.SamAccountName = username;

        PrincipalSearcher srch2 = new PrincipalSearcher(qbeUser);
        foreach (var found in srch2.FindAll())
        {
            Person user = new Person();
            user.userDetails = found.DisplayName + " (" + found.SamAccountName + ")";
            allUsers.Add(user);
        }

        //allUsers.Sort();
        return allUsers.ToArray();


    }
    public class Person
    {
        public string userDetails { get; set; }
    }

我必须在这里做错事,我无法直接发现。从SO答案尝试了很多不同的片段,但不适合我的问题。

2 个答案:

答案 0 :(得分:1)

我不确定这是否适用但是在MVC4中我使用了自动完成功能到控制器并且我的返回行是

return Json(items, JsonRequestBehavior.AllowGet);

项目为List,返回类型为JsonResult

答案 1 :(得分:1)

您将返回Person[]并在您的成功函数中尝试使用item.username,并且根据Person的定义,它没有username <的任何属性/ p>

您可以尝试item.userDetails并查看是否显示结果。