JQueryUIを使用して Windows ユーザー アカウントの単純な検索を実装しようとしています。
要件ユーザーがコントロールに姓または名を入力するHTML
<input>
と、その検索項目のフルネームと (usernames) のすべての可能な一致が返される必要があります。サーバーは以下のように結果を返しますが:
問題:<input>
ボックスに検索語が表示され、オプションのない「白い」ドロップダウンが表示されます。
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の回答から多くの異なるスニペットを試しましたが、私の問題には合いませんでした。