Хотя очень поздно ответить на этот вопрос, но здесь он для будущих визитов:
Создать вид модели класс:
public class UserViewModel
{
public string Username { get; set; }
public string Email { get; set; }
public string Role { get; set; }
}
Затем заполнить этот вид класс модели в контроллере:
var usersWithRoles = (from user in context.Users
from userRole in user.Roles
join role in context.Roles on userRole.RoleId equals
role.Id
select new UserViewModel()
{
Username = user.UserName,
Email = user.Email,
Role = role.Name
}).ToList();
Здесь context.Users
представляет AspNetUsers
таблицу, которая имеет свойство навигации Roles
который представляет собой таблицу AspNetUserInRoles
. Затем мы выполняем объединение context.Roles
, которое представляет таблицу AspNetRoles
, чтобы получить название роли.
Теперь верните этот список на ваш взгляд Индекс:
return View(userWithRoles);
В представлении показать список пользователей с ролями:
@model IEnumerable<MyProject.Models.UserViewModel>
<div class="row">
<h4>Users</h4>
@foreach (var user in Model)
{
<p>
<strong>
@user.Username | @user.Email | @user.Role
</strong>
</p>
}
</div>
Edit: Для того, чтобы получить несколько ролей пользователя (если он назначен какой-либо)
var usersWithRoles = (from user in _ctx.Users
select new
{
Username = user.UserName,
Email = user.Email,
RoleNames = (from userRole in user.Roles
join role in _ctx.Roles on userRole.RoleId equals role.Id
select role.Name).ToList()
}).ToList().Select(p => new UserViewModel()
{
Username = p.Username,
Email = p.Email,
Role = string.Join(",", p.RoleNames)
});
'context.Users' должен иметь' Roles' свойство для каждого 'user':' var usersWithRoles = context.Users.Select (x => новый UserWithRolesViewModel {User = x, UserRoles = x.Roles}). ToList(); ' –
Какое пространство имен следует добавить в представление этот метод actionResult? – Rras
и что такое UserWithRolesViewModel после нового ключевого слова? Прошу прощения за такие глупые вещи, но я новичок в разработке MVC. – Rras