Asp.net mvc Active Directory如何从DifferentizedName获取用户

Asp.net mvc Active Directory如何从DifferentizedName获取用户,asp.net-mvc,active-directory,Asp.net Mvc,Active Directory,我需要一些关于在asp.net mvc项目中检索具有DifferentizedName的用户的帮助。我有一个搜索函数,它有两个属性要加载,“displayName”和“discriminatedname”。一旦找到,我将返回一个视图,其中包含找到的每个用户的这两个参数的列表。然后我希望能够点击一个用户并立即显示他们的信息。那么,一旦我只传递了这两个参数,我如何加载关于用户的信息呢 以下是最初搜索的函数: public List<string> SearchUserByName(str

我需要一些关于在asp.net mvc项目中检索具有DifferentizedName的用户的帮助。我有一个搜索函数,它有两个属性要加载,“displayName”和“discriminatedname”。一旦找到,我将返回一个视图,其中包含找到的每个用户的这两个参数的列表。然后我希望能够点击一个用户并立即显示他们的信息。那么,一旦我只传递了这两个参数,我如何加载关于用户的信息呢

以下是最初搜索的函数:

public List<string> SearchUserByName(string name){
        try{

                DirectoryEntry ldapConnection = createDirectoryEntry();
                DirectorySearcher search = new DirectorySearcher(ldapConnection);
            search.PropertiesToLoad.Add("displayName");
            search.PropertiesToLoad.Add("distinguishedName");
            resultCollection = search.FindAll();

            if (resultCollection.Count == 0)
            {
                return null;
            }
            else
            {
                foreach(SearchResult sResult in resultCollection)
                {
                    if (sResult.Properties["distinguishedName"][0].Equals(null) ||
                        sResult.Properties["displayName"][0].Equals(null))
                        continue;

                    displayName.Add(sResult.Properties["distinguishedName"][0].ToString());
                    displayName.Add(sResult.Properties["displayName"][0].ToString());
                }
            }
            ldapConnection.Close();
            ldapConnection.Dispose();
            search.Dispose();
            return displayName;
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception caught:\n\n" + e.ToString());
        }
        return null;
    }
公共列表SearchUserByName(字符串名称){
试一试{
DirectoryEntry ldapConnection=createDirectoryEntry();
DirectorySearcher search=新的DirectorySearcher(ldapConnection);
search.PropertiesToLoad.Add(“displayName”);
search.PropertiesToLoad.Add(“DiscrimitedName”);
resultCollection=search.FindAll();
if(resultCollection.Count==0)
{
返回null;
}
其他的
{
foreach(搜索结果sResult in resultCollection)
{
if(sResult.Properties[“DifferentizedName”][0]。等于(null)||
sResult.Properties[“displayName”][0]。等于(null))
继续;
displayName.Add(sResult.Properties[“DifferentizedName”][0].ToString());
displayName.Add(sResult.Properties[“displayName”][0].ToString());
}
}
ldapConnection.Close();
ldapConnection.Dispose();
search.Dispose();
返回显示名;
}
捕获(例外e)
{
WriteLine(“捕获到异常:\n\n”+e.ToString());
}
返回null;
}
现在我的观点是:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Résultat de recherche d'utilisateurs</title>
</head>
<body>
    <h2> Résultat de recherche d'utilisateurs</h2>


    @{
        var incLoop = 0;
        var incArr = 0;
        var list = (List<string>)ViewData["Names"];
        var size = list.Count();
        string[] objSID = new string[size];
        foreach (var link in list)
        {
            if (incLoop % 2 == 0)
            {
                objSID[incArr] = link;
                incArr++;
            }
            else
            {
               <a href="@Url.Action("ShowUserInfo", "Home", new {dinstinguishedName=objSID[incArr-1]})">@link</a><br/>

            }
            incLoop++;
        }
    }
</body>
</html>

利用率研究院
利用率研究院
@{
var incLoop=0;
var=0;
变量列表=(列表)视图数据[“名称”];
var size=list.Count();
string[]objSID=新字符串[大小];
foreach(列表中的var链接)
{
如果(包括循环%2==0)
{
objSID[INVOR]=链接;
化身++;
}
其他的
{

} incLoop++; } }
如果单击标记中的@link,您将获得信息,该信息将显示在下一个视图中。我还拆分了我的列表,以便在搜索结果视图中不显示区分名称。 我现在所做的是在点击链接时搜索Active Directory,但这似乎是一种不好的做法(搜索两次以获得一个结果)。有什么想法吗


谢谢,希望你说得很清楚

你可以把你需要的额外信息作为路由值附加到动作链接上。是的,唯一的问题是如果我显示1K用户,可能会有点重(如果我理解正确的话)。如果你还是要显示1K用户,我认为在链接中添加几个额外的路由值不会对浏览器的性能产生太大的影响。我最近一次渲染了一个包含1000个文件夹的树视图,效果很好。但如果有问题,只需将结果分页即可。哦,好的,我会尝试一下,谢谢:)