2015-11-15 2 views
0

Я очень новичок в MVC5 и пытаюсь отобразить представление списка пользователей и имя роли, в которой они находятся. Я создал роли с использованием MVC Identity.Просмотр списка с указанием роли и приложения Пользователь

Ниже мой ViewModel

public class UserRoleViewModel 
{ 

    public string UserRoleVMId { get; set; } 

    public string Title { get; set; } 

    public string FirstName { get; set; } 

    public string Surname { get; set; } 

    public string Email { get; set; } 

    public string Role { get; set; } 

    public bool AccountEnabled { get; set; } 


} 

И мой контроллер:

public ActionResult Index() 
    { 
     var model = (from d in db.Users 
        select new UserRoleViewModel() 
        { 
         UserRoleVMId = d.Id, 
         Title = d.Title, 
         FirstName = d.FirstName, 
         Surname = d.Surname, 
         Email = d.Email, 
         AccountEnabled = d.AccountEnabled, 
         Role = d.Role.Name 
        }).ToList(); 

     return View(model); 
    } 

Я уверен в том, чтобы отобразить имя роли, и я получаю сообщение об ошибке,

does not contain the definition for Role and no extension method Role 

в

Role = d.Role.Name 

Любая помощь будет принята с благодарностью

Благодаря

+2

Вы должны присоединиться таблицу Role со столом пользователя, чтобы получить имя роли. – Azim

ответ

0

Вы можете использовать этот код

return view(db.Users.ToList()); 

и на ваш взгляд, на вершине использования

@model IEnumerable<YourProjectName.Models.Users> 

и использовать этот Еогеасп для показать контент

@foreach(var item in Model){<p>@item.Title</p> and etc } 
+0

Также не рекомендовал бы это ... ему просто нужно использовать соединение. – Seabizkit

0

Вы можете использовать GetRoles метод:

viewModel.RolesForThisUser = UserManager.GetRoles(userId).ToList(); 

Это полезно, если вы хотите, чтобы отобразить детали одного пользователя.

Вы должны использовать Роли собственности, так как пользователь может иметь несколько ролей:

public ActionResult Index() 
    { 
     using(var context = new IdentityDbContext()){ 

    viewModel = 
     context.Users 
     .Include("Roles") 
     .Select(u => 
      new UserRoleViewModel { 
       UserRoleVMId = u.Id, 
       Title = u.Title, 
       FirstName = u.FirstName, 
       Surname = u.Surname, 
       Email = u.Email, 
       AccountEnabled = u.AccountEnabled, 
       Role = u.Roles.First().Role.ToString() 
      } 
     ).ToList(); 
    } 

     return View(viewModel); 
    } 
+0

Я бы не рекомендовал это! .. ему просто нужно использовать соединение. – Seabizkit

+0

@ Seabizkit, не могли бы вы объяснить, почему вы этого не сделали? –

+0

он в петле .... делаю это так, было бы очень дорого ... когда он мог бы просто присоединиться к коду, который у него есть ... что технически является более правильным способом в любом случае ..... – Seabizkit