2016-04-21 16 views
0

Ich habe eine Tabelle namens accesslinked with FK to user's table, also, ein Benutzer haben eine Sammlung von Zugriffen.MVC5 EF Daten zur Ansicht

Damit gibt mein Controller eine Liste mit allen Zugriffen zurück.

Ich möchte eine Dropdown-Liste mit allen Benutzern erstellen, die auf dem Tisch des Benutzers sind.

Dazu folgte ich die erste Antwort von this Frage.

ich hier den Code meiner Controller einfügen werden, die einen Blick tun Index zurück:

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()); 

} 

Wie Sie in den Kommentarzeilen sehen kann ich tun, um eine Abfrage, die eine Liste mit Benutzernamen zurück.

Mein Problem ist: Wie ich auf diese Liste in der Warteschlangenansicht zugreifen?

Ich habe dies in meiner Ansicht:

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

aber ich nicht "Model.something" verwenden kann.

TiA!

+0

Anstatt 'userAccesses.ToList()' als Modell zu verwenden, müssen Sie im Verzeichnis 'Models' eine Modellklasse erstellen, die alle Eigenschaften aufweist, die Ihre Ansicht benötigt. –

+0

@PaulAbbott aber die Liste ist in meiner UserAccess-Klasse. [Siehe hier] (https://gyazo.com/a3f6986c4d44aa8dd3e8f24df5165711) –

Antwort

1

eine Modellklasse im Models Verzeichnis Stellen mit den Eigenschaften der Ansicht muss:

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

    public SelectList NamesToList { get; set; } 
} 

dieses Modell in der Steuerung Bestücken:

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); 
} 

Jetzt können Sie beide Zugriff mit @Model.NamesToList und @Model.UserAccesses in die Aussicht.

+0

cal sagst du mt eine andere Sache? Ich möchte auf mein Drop-down "Alles" haben, aber offensichtlich ist es nicht auf meiner Liste, wie mache ich das? –

Verwandte Themen