2016-04-21 59 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

卡尔你告诉山另一件事?我想在我的下拉菜单中选择“全部”,但显然它不在我的列表中,我该怎么做? –