Представление «Список» / «Подробно» без Entity Framework - PullRequest
0 голосов
/ 31 октября 2018

У меня есть MVC представление , в котором есть таблица, содержащая список всех пользователей в определенном подразделении в Active Directory. Я пытаюсь добавить в таблицу столбец, который переводит вас в представление сведений, в котором отображаются сведения о пользователе (отображаются дополнительные сведения), но мне трудно понять, как это сделать без использования Entity Framework и передачи идентификатора. объекта для просмотра деталей. Любые мысли о том, как я мог бы сделать это? Прямо сейчас, когда я нажимаю на ссылку действия Подробности, я перехожу в представление Подробности, но данные не передаются. Любая помощь будет принята с благодарностью!

public ActionResult NonComputerUsers(User model)
    {  

        List<User> user = new List<User>();

        using (var context = new PrincipalContext(ContextType.Domain, "XXX", "OU=XXX,DC=XXX,DC=com"))
        {
            using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
            {
                foreach (var result in searcher.FindAll())
                {
                    DirectoryEntry entry = result.GetUnderlyingObject() as DirectoryEntry;
                    user.Add(new User()
                    {
                        FirstName = (String)entry.Properties["givenName"].Value,
                        LastName = (String)entry.Properties["sn"].Value,
                    });
                }
            }
        }

        return View(user.ToList());
    }


 public ActionResult Details(User model)
    {
        ?????????


        return View(model);
    }



**List View**
@model ADUserManagement.Models.User

<table class="table">
 <tr>
    <th>
        First Name
    </th>
    <th>
        Last Name
    </th>

 </tr>

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.FirstName)
        </td>

        <td>
            @Html.DisplayFor(modelItem => item.LastName)
        </td>

        <td>
           @Html.ActionLink("Details", "Details", "Users", new { item = item.FirstName })
        </td>
    </tr>
    }

**Details View**
@model ADUserManagement.Models.User

@{
ViewBag.Title = "Details";
}

<h2>Details</h2>

<table class="table table-bordered table-striped">
<tr>
    <td>First Name</td>
    <td>@Model.FirstName</td>
</tr>
<tr>
    <td>Last Name</td>
    <td>@Model.LastName</td>
</tr>
<tr>
    <td>SAM Account Name</td>
    <td>@Model.SamAccountName</td>
</tr>

1 Ответ

0 голосов
/ 31 октября 2018

Есть несколько способов сделать это. Одним из них является то, как вы уже это делаете. Вы можете добавить все свойства, которые хотите отобразить на странице сведений, в модель User. Используйте этот список для построения таблицы, а затем передайте соответствующий объект User обратно в представление Details для отображения дополнительной информации.

Этот метод хорош, потому что он избавляет вас от необходимости повторного поиска в AD для вашего Details представления (по сути, ваш ????????? может быть удален - вам не нужен там код).

Я собирался сказать, что недостатком является то, что при поиске вы запрашиваете больше информации по большинству учетных записей, чем на самом деле используете, но объекты UserPrincipal, которые PrincipalSearcher уже возвращает в любом случае вытягивает все атрибуты AD для каждой учетной записи пользователя. Если бы вы использовали DirectorySearcher напрямую, у вас было бы больше контроля над этим. Но это, вероятно, не имеет большого значения, если у вас нет проблем с производительностью в этом поиске.

Другой способ сделать это, который я считаю ненужным в вашем текущем примере, это сохранить некоторый уникальный идентификатор из AD (например, distinguishedName, sAMAccountName, userPrincipalName, objectGuid, objectSid) и просто передайте это обратно в ваше действие Details, где вы сможете снова просмотреть только эту учетную запись и получить все детали, необходимые для просмотра подробностей.

...