0

Active Directory と Ajax Control Toolkit を使用するのはこれが初めてです。私がやろうとしているのは、ユーザーがテキストボックスに名前を入力し始めると、AD にリストされている名前を自動補完しようとすることです。AutoCompleteExtender を使用して見つけることができるすべての例は、ServicePath の ASMX ファイルを参照しています。

AD Web サービスをプロジェクトへのサービス参照として追加する方法を理解することができました。AutoCompleteExtender に AD サービス参照を認識させて再生させる方法について、誰かがガイダンスや例を提供できますか? それは可能ですか?

ご協力ありがとうございます。

4

1 に答える 1

0

システム管理者が正しい LDAP パスを取得するために多くの調査と支援を行った結果、最終的にこれが機能するようになりました。他の人が恩恵を受けることができるように、コードを投稿しています。(最初に AJAX Control Toolkit for .NET 4.0 をインストールしたことに注意してください。)

デフォルト.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();
        }
    }
}

楽しみ!

于 2012-06-25T17:13:04.150 に答える