Search code examples
asp.net-mvcmodel-view-controllerviewactive-directory-group

Display Active Directory Group in a MVC view


I Am trying to display active directory group member in the view. When i run the Code I am having the error "The model item passed into the dictionary is of type 'System.String[]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[SSSFT.LogIT.Models.ActiveDirectory]'". Debbuging the code show all the group member i am looking for

Model Class

public class ActiveDirectory
{
    public int id { get; set; }

    //public string Username { get; set; }

    //public string Email { get; set; }

    public string SamAccountName { get; set; }


}

Controller

   public ActionResult Index(string username)
    {
        username = "sssftappdev";
        string[]output = null;     
        using (var ctx = new PrincipalContext(ContextType.Domain))
        using (var user = UserPrincipal.FindByIdentity(ctx, username))
        {
            if (user != null)
            {
                output = user.GetGroups() //this returns a collection of principal objects
                    .Select(x => x.SamAccountName) // select the name.  you may change this to choose the display name or whatever you want
                    .ToArray(); // convert to string array
            }

        }
       return View(output);
    }

View

@model IEnumerable<SSSFT.LogIT.Models.ActiveDirectory>
<table class="table">
<tr>
    <th>
        @Html.DisplayNameFor(model => model.SamAccountName)
    </th>
    <th></th>
</tr>

 @foreach (var item in Model) {
  <tr>
    <td>
        @Html.DisplayFor(modelItem => item.SamAccountName)
    </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.id }) |
        @Html.ActionLink("Details", "Details", new { id=item.id }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.id })
    </td>
   </tr>
 }

  </table>

Solution

  • You can fix this error by simply updating your @model with:

    @model String[]
    

    You are currently passing a String[] to your view while expecting an IEnumerable of SSSFT.LogIT.Models.ActiveDirectory. Either update your code to return the right type of data, or adapt your strongly typed view with the actual result you return.