【问题标题】:Implement treeview in asp.net which looks like active directory OUs在 asp.net 中实现类似于活动目录 OU 的树视图
【发布时间】:2014-05-05 12:37:42
【问题描述】:

目前,我已使用 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);

我的活动目录树形结构如下所示:

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

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

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

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

我们怎样才能做到这一点?请帮我做这件事。

【问题讨论】:

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


【解决方案1】:

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

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

然后,您可以像这样使用 DirectorySearcher 请求您的 AD: DirectorySearcher 搜索器 = null; SearchResultCollection 结果 = 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 提出并回答了同样的问题!

【讨论】:

  • 我通过你的代码得到了它,但是如何在我的 asp.net treeview(treeview1) 控件上绑定这个列表值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多