在asp.net中实现treeview,它看起来像活动目录OU

时间:2014-05-05 12:37:42

标签: c# asp.net active-directory treeview

目前,我已使用Directory Entry对象将我的Web应用程序与Active Directory连接,并使用硬编码值填充了树视图节点。我

将来,如果有人添加新的组织单位,我将不得不再次手动添加。

我想动态绑定树视图上的所有组织单位,而不是这样做。

请建议我,我该如何实现此功能?

这是我的代码:

PrincipalContext ouContext = new PrincipalContext(ContextType.Domain, "10.27.25.164", "OU=Users,OU=SanFransisco,OU=America,DC=server,DC=local", AD.LDAPUser, AD.LDAPPasswoprd);

我的活动目录arborescence看起来像这样:

Server.Local
---America
   ...SanFrancisco
   ...Mexico
      .... Users
---India
   ...Bangalore
       .... Users
   ...Chennai
       .... Users
---China
   ...Shangai

我需要实现一个函数,它必须动态地将Active Directory中的所有值绑定到asp.net treeview控件。

就我而言,我公司希望在日本增加新的OU。我的系统人员将在Active Directory服务器上添加新的OU。但是在我将手动添加新的组织单位之前,我的应用程序树视图不会更新。

他们需要将此场景视为动态场景。当任何管理员在活动目录上添加新OU时,应用程序必须自动在树视图(treeview1)上检索新添加的OU。

我们怎么做?请帮我这样做。

1 个答案:

答案 0 :(得分:0)

我宁愿使用DirectoryEntry对象而不是PrincipalContext

在您的情况下,您可以初始化与您的根OU(server.local)对应的DirectoryEntry对象,如thisthis

然后,您可以使用这样的DirectorySearcher请求您的AD:       DirectorySearcher searcher = null;       SearchResultCollection result = null;

try
{
    searcher = new DirectorySearcher(RootEntry, "(objectClass=organizationalunit)", null, SearchScope.Subtree);

    result = searcher.FindAll();

    list.AddRange(from SearchResult res in result
                  select Entry = res.GetDirectoryEntry());
}
finally
{
    if (searcher != null) searcher.Dispose();
    if (result!= null) result.Dispose();
}

获得DirectoryEntry列表后,您可以使用他们的LDAP路径来了解父母和孩子的身份,最后构建您的树视图。

一旦您不再需要这些条目,请小心处理列表中的每个条目。


<强>

修改

提出同样的问题并回答here