使用Activedirectory在asp.net MVC 4中开发用户搜索页面

时间:2014-01-20 06:52:44

标签: asp.net-mvc-4 active-directory windows-authentication

我正在开发ASp.net MVC 4 Intranet应用程序。 因此,当我登录时,我可以看到我的帐户显示。 现在,通过以下链接授权我开发了自定义授权提供商的帐户:http://www.codeproject.com/Articles/607392/Custom-Role-Providers

现在我的问题是在初始授权之后,我将自己添加到superadmin角色,该角色可以访问Index.cstml,其中有一个文本框和一个搜索按钮。

基本上在这个页面上我想从活动目录中搜索用户并显示它以便我可以为用户分配一些角色。 我怎么做? 请提供代码如何连接到Active目录,在哪里提供LDAP的连接字符串和excat方法,它将帮助我从活动目录中搜索用户并在索引视图上显示它。

以下是我的尝试: 实体:ADuser->属性UserLoginName,UserDispalyName Model:有一个方法,从AD返回serch用户并将其添加到实体 公共类ADUserModel     {

    public List<ADUser> GetUserFromAD(string name) //Get Network Users (AD)
    {
        //ArrayList searchUser = new ArrayList();
        var domainContext = new PrincipalContext(ContextType.Domain);
        var groupPrincipal = GroupPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, "Domain Users");
        UserPrincipal user = new UserPrincipal(domainContext);
        user.Enabled = true;
        user.Name = name + "*";

        PrincipalSearcher pS = new PrincipalSearcher();
        pS.QueryFilter = user;

        PrincipalSearchResult<Principal> results = pS.FindAll();
        var list = new List<ADUser>();


        //searchUser.Add(results);
        foreach (var item in results)
        {
            var users = new ADUser();
            users.UserLoginName = item.SamAccountName;
            users.UserDisplayName = item.DisplayName;
            list.Add(users);
            //searchUser.Add(users);
        }

        return list;

    }
}

Controller:有一个将返回视图的动作方法

public class ManageUsersController:Controller     {         //         // GET:/ ManageUsers /

    public ActionResult Search(string searchString)
    {
        ADUserModel model = new ADUserModel();
        var list = new List<ADUser>();
        if (searchString != null)
        {
            list = model.GetUserFromAD(searchString);
            return View("Search");
        }
        else
        {
            return View("Search");
        }
    }
}

查看:Search.cshtml

 @model IEnumerable<FMSKendoUI.Entities.ADUser>
@{
   ViewBag.Title = "Search";
  }
@Html.BeginForm("Search","ManageUsers",FormMethod.Get)
{
@Html.TextBox("Search") <input type="submit" value="Search" />
}

@if (Model.Count() != 0)
{

    @foreach (FMSKendoUI.Entities.ADUser model in Model)
    {

            @Html.DisplayFor(m => model.UserLoginName)
            @Html.DisplayFor(m => model.UserDisplayName)

    }


}

但我的问题是: 在我的第一页加载期间,我只需要文本框和搜索按钮。 然后在搜索按钮上单击我需要调用控制器搜索方法。

因为在我的实体第一次为null时它给了我null异常。 只有在我提供搜索字符串并调用模型方法后才能加载我的实体。

我无法实现这一目标。请帮帮我。

0 个答案:

没有答案