Представление списка / Представление сведений без Entity Framework
У меня есть представление 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 ответ
Есть несколько способов сделать это. Одним из них является то, как вы уже это делаете. Вы можете добавить все свойства, которые вы хотите отобразить на странице сведений в свой User
модель. Используйте этот список, чтобы построить свою таблицу, а затем передать соответствующие User
Возврат к вашему Details
посмотреть, чтобы отобразить дополнительные детали.
Этот метод хорош, потому что он избавляет вас от необходимости повторного поиска AD для вашего Details
посмотреть (по сути, ваш ?????????
может быть удален - вам не нужен код).
Я собирался сказать, что недостатком является то, что при поиске вы запрашиваете более подробную информацию по большинству учетных записей, чем на самом деле, но UserPrincipal
объекты, которые PrincipalSearcher
возвращает уже вытягивает все атрибуты AD для каждой учетной записи пользователя в любом случае. Если вы использовали DirectorySearcher
напрямую, вы бы имели больше контроля над этим. Но это, вероятно, не имеет большого значения, если у вас нет проблем с производительностью в этом поиске.
Другой способ сделать это, который я считаю ненужным в вашем текущем примере, это сохранить некоторый уникальный идентификатор из AD (например, distinguishedName
, sAMAccountName
, userPrincipalName
, objectGuid
, objectSid
) и передайте это обратно вашему Details
действие, в котором вы можете снова просмотреть только эту учетную запись и получить все детали, необходимые для просмотра подробностей.