简体   繁体   English

MVC5 EF返回数据以查看

[英]MVC5 EF Return data to view

I have one table called access linked with FK to user's table , so, a user have a collection of accesses. 我有一个名为access linked with FK to user's table ,该linked with FK to user's table ,因此,用户具有一组访问权限。

With this, my controller return a list with all accesses. 这样,我的控制器将返回一个包含所有访问权限的列表。

I want to create a dropdown with all users that are on user's table. 我想创建一个包含用户表上所有用户的下拉菜单。

To to that i followed the 1st answer of this question. 为此,我遵循了这个问题的第一个答案。

I'll paste here the code of my controller that return a view do index: 我将在此处粘贴返回视图do索引的控制器代码:

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

}

As you can see, in the commented lines i do a query that return a list with user names. 如您所见,在注释行中,我执行了一个查询,该查询返回带有用户名的列表。

My problem is: How I access this list on que view? 我的问题是:如何在查询视图中访问此列表?

I put this on my view: 我认为:

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

but I can't use "Model.something". 但我不能使用“ Model.something”。

TiA! TiA!

Make a model class in the Models directory with the properties the view needs: 使用视图所需的属性在Models目录中创建模型类:

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

    public SelectList NamesToList { get; set; }
}

Populate that model in the controller: 在控制器中填充该模型:

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

Now you can access both using @Model.NamesToList and @Model.UserAccesses in the view. 现在,您可以在视图中使用@Model.NamesToList@Model.UserAccesses进行访问。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM