这是我第一次使用Active Directory以及Ajax Control Toolkit。我想要做的是当用户开始在文本框中键入他们的名字时,它将尝试自动完成他们在AD中列出的名称。我在使用AutoCompleteExtender时可以找到的每个示例,都是指ServicePath中的ASMX文件。
我已经设法弄清楚如何添加我们的AD Web服务作为我的项目的服务参考。 任何人都可以提供有关如何让AutoCompleteExtender识别和使用我的AD服务参考的任何指导或示例吗?它甚至可能吗?
感谢您的帮助。
答案 0 :(得分:0)
经过我们系统管理员的大量研究和帮助以获得正确的LDAP路径,我终于得到了这个工作。我正在发布代码,以便其他人可以从中受益。 (请注意,我首先安装了适用于.NET 4.0的AJAX Control Toolkit。)
<强> Default.aspx的:强>
<ajaxToolkit:ToolkitScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True"></ajaxToolkit:ToolkitScriptManager>
<asp:TextBox ID="txtSearchAD" runat="server"></asp:TextBox>
<ajaxToolkit:AutoCompleteExtender ServiceMethod="findEmp"
MinimumPrefixLength="3"
CompletionInterval="100"
EnableCaching="true"
CompletionSetCount="10"
TargetControlID="txtSearchAD"
ID="ace1"
runat="server"
FirstRowSelected="false" ServicePath="ADS.asmx">
</ajaxToolkit:AutoCompleteExtender>
<强> ADS.asmx.cs:强>
namespace EventTracking
{
/// <summary>
/// Summary description for ADS
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class ADS : System.Web.Services.WebService
{
[WebMethod]
public string[] findEmp(string prefixText, int count)
{
DirectoryEntry directory = new DirectoryEntry();
directory.Path = "LDAP://DC=yourdomain,DC=com"; //CHANGE to your LDAP path
string filter = "(&(cn=" + prefixText + "*))";
string[] strCats = { "cn" };
List<string> items = new List<string>();
DirectorySearcher dirComp = new DirectorySearcher(directory, filter, strCats, SearchScope.Subtree);
SearchResultCollection results = dirComp.FindAll();
foreach (SearchResult result in results)
{
foreach (DictionaryEntry prop in result.Properties)
{
if (prop.Key.Equals("cn"))
{
System.Collections.IEnumerable propsEnum = prop.Value as System.Collections.IEnumerable;
foreach (object individualValue in propsEnum)
{
if (individualValue.ToString().IndexOf(prefixText) != 0)
{
items.Add(individualValue.ToString());
}
}
}
}
}
return items.ToArray();
}
}
}
享受!