2016-04-21 38 views
0

我有一個表叫accesslinked with FK to user's table,所以用戶有一個訪問集合。MVC5 EF返回數據查看

有了這個,我的控制器返回一個包含所有訪問的列表。

我想創建一個與用戶表上的所有用戶的下拉菜單。

對此,我跟着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

卡爾你告訴山另一件事?我想在我的下拉菜單中選擇「全部」,但顯然它不在我的列表中,我該怎麼做? –