繁体   English   中英

在ASP.NET MVC中使用JQuery填充下拉列表(Active Directory请求)

[英]Populate DropDown List using JQuery in ASP.NET MVC (Active Directory request)

编辑:以下代码适用于任何需要的人!

这个问题很多,但找不到针对该特定问题的帮助。 我需要显示一个在我输入搜索栏时加载的下拉列表。 键入时,我需要在Active Directory中搜索要键入的用户名,然后在下拉列表中显示所有选项(例如,它只会在4个字符后显示结果)。

我有一个简单的表单,其中有一个输入,一个按钮,一个控制器功能,可以从C#类中搜索用户,使我能够访问AD。 我放置了JQuery脚本来检索数据。 数据已正确获取,但无法在自动完成中显示。 有任何想法吗?

表格:

    <form class="form-inline" method="post" action="~/Home/SearchUserResult">
        <label class="sr-only" for="inlineFormInput"> Nom et/ou Prénom </label>
        <input type="text" class="form-control mb-2 mr-sm-2 mb-sm-0" name="searchName" id="searchName" placeholder="Nom et/ou prénom"/>
        <button class="btn btn-primary" type="submit" id="searchValidate"> Rechercher </button>
    </form>

我的广告搜索功能:

    public List<string> SearchUserByName(string name)
    {
        try
        {
            SearchResultCollection resultCollection;
            DirectoryEntry ldapConnection = createDirectoryEntry();
            DirectorySearcher search = new DirectorySearcher(ldapConnection);


            search.Filter = "(anr=" + name + ")";
            search.PropertiesToLoad.Add("displayName");
            resultCollection = search.FindAll();

            if (resultCollection.Count == 0)
            {
                return null;
            }
            else
            {
                foreach(SearchResult sResult in resultCollection)
                {
                    lastName.Add(sResult.Properties["displayName"][0].ToString());
                }
            }
            return lastName;
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception caught:\n\n" + e.ToString());
        }
        return null;
    }

}

这是@caner建议的控制器功能

public ActionResult SearchUserByName(string name)
{
    ADManager adManager = new ADManager();
    List<string> lastName = adManager.SearchUserByName(name);
    if (lastName != null)
    {
        ViewData["Names"] = lastName;
        return Json(lastName,JsonRequestBehavior.AllowGet);
    }
    return null;
}

最后,这里是我现在拥有的脚本,它获取数据但不显示它(在alert(data)中,我检索了我需要的所有信息):

    <script>
        $(function () {
            $("#searchName").autocomplete({
                source: function (request, response) {
                    $.ajax({
                        url: "/Home/SearchUserByName",
                        type: "GET",
                        data: { name: $("#searchName").val() },
                        contentType: "application/json;charset=utf-8",
                        dataType: "JSON",
                        success: function (data) {
                            alert(data)
                            response($.map(data, function (item) {
                                return {
                                    label: item
                                }
                            }));
                        },
                    });
                },
                minLength: 4
            })
        });
    </script>

谢谢你的帮助

编辑:createDirectoryEntry()是我创建的一个函数,用于创建与AD的连接。 编辑2:如果您有其他想法要用JQuery以外的方法来做,那么我愿意接受一切

试试这样的jQuery自动完成...

您的脚本:

 $(function () {
       $("#searchName").autocomplete({
           source: function (request, response) {                    
                   $.ajax({
                        url: "/YourController/SearchUserByName",
                        type: "POST",
                        data: { name: $("#searchName").val() },
                        dataType: "JSON",
                        success: function (data) {
                            response($.map(data.lastName, function (item) {
                                return {
                                    label: item
                                }
                            }));
                        },
                    });
                },
                minLength: 4
          })
 });

和您的控制器方法:

public ActionResult SearchUserByName(string name)
{
     .
     .
     .

     return Json(lastName);
}

该脚本对我有用:

<script>
        $(function () {
            $("#searchName").autocomplete({
                source: function (request, response) {
                    $.ajax({
                        url: "/Home/SearchUserByName",
                        type: "GET",
                        data: { name: $("#searchName").val() },
                        contentType: "application/json;charset=utf-8",
                        dataType: "JSON",
                        success: function (data) {
                            alert(data)
                            response($.map(data, function (item) {
                                return {
                                    label: item
                                }
                            }));
                        },
                    });
                },
                minLength: 4
            })
        });
    </script>

暂无
暂无

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

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