Ich habe eine Tabelle namens access
linked 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!
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. –
@PaulAbbott aber die Liste ist in meiner UserAccess-Klasse. [Siehe hier] (https://gyazo.com/a3f6986c4d44aa8dd3e8f24df5165711) –