2016-04-21 2 views
0

У меня есть одна таблица под названием accesslinked with FK to user's table, поэтому пользователь имеет коллекцию доступа.MVC5 EF Вернуться к представлению данных

С этим мой контроллер возвращает список со всеми обращениями.

Я хочу создать выпадающее меню со всеми пользователями, находящимися на пользовательской таблице.

Для этого я следил за 1-м ответом this вопроса.

Я вставить сюда код моего контроллера, который возвращает вид сделать индекс:

public ActionResult Index(string searchString, string sortOrder) 
{ 
    ViewBag.IDSortParm = sortOrder == "ID_asc" ? "ID_desc" : "ID_asc"; 
    ViewBag.EmailSortParm = sortOrder == "Email_asc" ? "Email_desc" : "Email_asc"; 
    ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date"; 
    ViewBag.NameSortParm = sortOrder == "Name_asc" ? "Name_desc" : "Name_asc"; 

    var userAccesses = db.UserAccesses.Include(u => u.User); 
    //UserNamesToList = GetUserNamesList(); 
    /* 
    var NamesToListQ = userAccesses.Select(x => new SelectListItem 
               { 
                Value = x.User.Id, 
                Text = x.User.Name 
               }); 

    var NamesToList = new SelectList(NamesToListQ, "Value", "Text"); 
    */ 


    if (User.IsInRole("Admin")) 
    { 
     userAccesses = db.UserAccesses.Include(u => u.User); 


     switch (sortOrder) 
     { 
      case "Date": 
       userAccesses = db.UserAccesses.Include(u => u.User).OrderBy(s => s.Access); 
       break; 
      case "date_desc": 
       userAccesses = db.UserAccesses.Include(u => u.User).OrderByDescending(s => s.Access); 
       break; 
      case "Email_desc": 
       userAccesses = db.UserAccesses.Include(u => u.User).OrderByDescending(s => s.User.Email); 
       break; 
      case "Email_asc": 
       userAccesses = db.UserAccesses.Include(u => u.User).OrderBy(s => s.User.Email); 
       break; 
      case "ID_desc": 
       userAccesses = db.UserAccesses.Include(u => u.User).OrderByDescending(s => s.UserAcessID); 
       break; 
      case "ID_asc": 
       userAccesses = db.UserAccesses.Include(u => u.User).OrderBy(s => s.UserAcessID); 
       break; 
      case "Name_asc": 
       userAccesses = db.UserAccesses.Include(u => u.User).OrderBy(s => s.User.Name); 
       break; 
      case "Name_desc": 
       userAccesses = db.UserAccesses.Include(u => u.User).OrderBy(s => s.User.Name); 
       break; 
      default: 
       userAccesses = db.UserAccesses.Include(u => u.User).OrderBy(s => s.UserAcessID); 
       break; 
     } 


     if (!String.IsNullOrEmpty(searchString)) 
     { 
      userAccesses = db.UserAccesses.Include(u => u.User) 
          .Where(s => s.User.Email.Contains(searchString) || s.User.Id.Contains(searchString)); 

      switch (sortOrder) 
      { 
       case "Date": 
        userAccesses = db.UserAccesses.Include(u => u.User) 
          .Where(s => s.User.Email.Contains(searchString) || s.User.Id.Contains(searchString)) 
          .OrderBy(s => s.Access); 
        break; 
       case "date_desc": 
        userAccesses = db.UserAccesses.Include(u => u.User) 
          .Where(s => s.User.Email.Contains(searchString) || s.User.Id.Contains(searchString)) 
          .OrderByDescending(s => s.Access); 
        break; 
       case "Email_desc": 
        userAccesses = db.UserAccesses.Include(u => u.User) 
          .Where(s => s.User.Email.Contains(searchString) || s.User.Id.Contains(searchString)) 
          .OrderByDescending(s => s.User.Email); 
        break; 
       case "Email_asc": 
        userAccesses = db.UserAccesses.Include(u => u.User) 
          .Where(s => s.User.Email.Contains(searchString) || s.User.Id.Contains(searchString)) 
          .OrderBy(s => s.User.Email); 
        break; 
       case "ID_desc": 
        userAccesses = db.UserAccesses.Include(u => u.User) 
          .Where(s => s.User.Email.Contains(searchString) || s.User.Id.Contains(searchString)) 
          .OrderByDescending(s => s.UserAcessID); 
        break; 
       case "ID_asc": 
        userAccesses = db.UserAccesses.Include(u => u.User) 
          .Where(s => s.User.Email.Contains(searchString) || s.User.Id.Contains(searchString)) 
          .OrderBy(s => s.UserAcessID); 
        break; 
       case "Name_asc": 
        userAccesses = db.UserAccesses.Include(u => u.User) 
          .Where(s => s.User.Email.Contains(searchString) || s.User.Id.Contains(searchString)) 
          .OrderBy(s => s.User.Name); 
        break; 
       case "Name_desc": 
        userAccesses = db.UserAccesses.Include(u => u.User) 
          .Where(s => s.User.Email.Contains(searchString) || s.User.Id.Contains(searchString)) 
          .OrderByDescending(s => s.User.Name); 
        break; 
       default: 
        userAccesses = db.UserAccesses.Include(u => u.User) 
          .Where(s => s.User.Email.Contains(searchString) || s.User.Id.Contains(searchString)) 
          .OrderBy(s => s.Access); 
        break; 
      } 

     } 

    } 
    else 
    { 
     var id = User.Identity.GetUserId(); 
     userAccesses = db.UserAccesses.Where(u => u.UserID == id).Include(i => i.User).Where(u => u.UserID == id); 


     switch (sortOrder) 
     { 
      case "Date": 
       userAccesses = db.UserAccesses.Where(u => u.UserID == id) 
               .Include(i => i.User) 
               .Where(u => u.UserID == id) 
               .OrderBy(s => s.Access); 
       break; 
      case "date_desc": 
       userAccesses = db.UserAccesses.Where(u => u.UserID == id) 
               .Include(i => i.User) 
               .Where(u => u.UserID == id) 
               .OrderByDescending(s => s.Access); 
       break; 
      case "Email_desc": 
       userAccesses = db.UserAccesses.Where(u => u.UserID == id) 
               .Include(i => i.User) 
               .Where(u => u.UserID == id) 
               .OrderByDescending(s => s.User.Email); 
       break; 
      case "Email_asc": 
       userAccesses = db.UserAccesses.Where(u => u.UserID == id) 
               .Include(i => i.User) 
               .Where(u => u.UserID == id) 
               .OrderBy(s => s.User.Email); 
       break; 
      case "ID_desc": 
       userAccesses = db.UserAccesses.Where(u => u.UserID == id) 
               .Include(i => i.User) 
               .Where(u => u.UserID == id) 
               .OrderByDescending(s => s.UserAcessID); 
       break; 
      case "ID_asc": 
       userAccesses = db.UserAccesses.Where(u => u.UserID == id) 
               .Include(i => i.User) 
               .Where(u => u.UserID == id) 
               .OrderBy(s => s.UserAcessID); 
       break; 
      case "Name_asc": 
       userAccesses = db.UserAccesses.Where(u => u.UserID == id) 
               .Include(i => i.User) 
               .Where(u => u.UserID == id) 
               .OrderBy(s => s.User.Name); 
       break; 
      case "Name_desc": 
       userAccesses = db.UserAccesses.Where(u => u.UserID == id) 
               .Include(i => i.User) 
               .Where(u => u.UserID == id) 
               .OrderBy(s => s.User.Name); 
       break; 
      default: 
       userAccesses = db.UserAccesses.Where(u => u.UserID == id) 
               .Include(i => i.User) 
               .Where(u => u.UserID == id) 
               .OrderBy(s => s.Access); 
       break; 
     } 

    } 


    return View(userAccesses.ToList()); 

} 

Как вы можете видеть, в комментируемых строках я сделать запрос, который возвращает список с именами пользователей.

Моя проблема: как получить доступ к этому списку в режиме просмотра?

Я положил это на мой взгляд:

@Html.LabelFor(m => m.SelectedUserRoleId) 
@Html.DropDownListFor(m => m.SelectedUserRoleId, Model.UserRoles) 

, но я не могу использовать "Model.something".

TiA!

+0

Вместо использования 'userAccesses.ToList()' в качестве вашей модели вам необходимо создать класс модели в каталоге 'Models', который обладает всеми свойствами, которые вам нужны. –

+0

@PaulAbbott, но список находится в моем классе UserAccess. [См. Здесь] (https://gyazo.com/a3f6986c4d44aa8dd3e8f24df5165711) –

ответ

1

Сделать класс модели в Models директории со свойствами вид нуждается:

public class MyModelOfSomething 
{ 
    public IEnumerable<UserAccess> UserAccesses { get; set; } 

    public SelectList NamesToList { get; set; } 
} 

занесения этой модели в контроллере:

public ActionResult Index(string searchString, string sortOrder) 
{ 
    var model = new MyModelOfSomething(); 

    ... 

    model.NamesToList = new SelectList(NamesToListQ, "Value", "Text"); 

    ... 

    model.UserAccesses = userAccesses.ToList(); 

    return View(model); 
} 

Теперь вы можете получить доступ как с помощью @Model.NamesToList и @Model.UserAccesses в вид.

+0

Кал вы говорите mt другую вещь? Я хочу иметь в своем раскрывающемся списке «Все», но, очевидно, это не входит в мой список, как я это делаю? –

Смежные вопросы