![](/img/trans.png)
[英]Cascading Dropdown List in Asp.net MVC4 using Json and Jquery not Populate
[英]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.