【发布时间】:2018-10-30 22:07:02
【问题描述】:
我有一个 MVC view,它有一个表,其中包含 Active Directory 中特定 OU 内所有用户的列表。我正在尝试向表中添加一列,该列将您带到显示用户详细信息的详细信息视图(显示其他详细信息),但我很难弄清楚如何在不使用实体框架和传递 id 的情况下执行此操作对象的详细信息视图。关于我如何做到这一点的任何想法?现在,当我单击详细信息操作链接时,我会转到详细信息视图,但没有传递任何数据。任何帮助将不胜感激!
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>
【问题讨论】:
-
删除这两种方法中的
User model参数。您的Details方法需要一个int id参数,并且“详细信息”链接会将用户的 ID 传递给该方法 -
由于用户信息来自 Active Directory,因此没有为用户设置 ID,如果我从这两种方法中删除用户模型,那么我无法将任何用户信息从列表视图传递到在详细信息视图中,我只是得到“对象引用未设置为对象的实例。”。不过感谢您的意见!
-
Active Directory 用户确实有唯一的 ID - 例如,
sAMAccountName等
标签: c# asp.net-mvc active-directory directoryservices directoryentry