在ASP.NET MVC应用程序中使用实体框架进行排序

本文关键字:框架 实体 排序 NET ASP MVC 应用程序 | 更新日期: 2023-09-27 18:29:19

我有一个传递结果的Index操作方法,我想通过相同的Index action方法对我的表进行排序。如何将两个值都传递给视图。这是我的索引操作方法

public ActionResult Index(string sortOrder)
{
    var userCount = db.CountUser();
    return View(userCount.ToList());
}

这是我的分类码:

ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
var teams = from t in db.Teams
            select t;
switch (sortOrder)
{
    case "name_desc":
        teams = teams.OrderByDescending(t => t.TeamName);
        break;
    default:
        teams = teams.OrderBy(t => t.TeamName);
        break;
}

在ASP.NET MVC应用程序中使用实体框架进行排序

您可以通过以下方式实现:

public ActionResult Index(string sortOrder)
{
    var userCount = db.CountUser();
    ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : sortOrder;
    var teams = from t in db.Teams
                select t;
    switch ((string)ViewBag.NameSortParm)
    {
        case "name_desc":
            teams = teams.OrderByDescending(t => t.TeamName);
            break;
        default:
            teams = teams.OrderBy(t => t.TeamName);
            break;
    }
    ViewBag.Teams = teams.ToList();
    return View(userCount.ToList());
}

并在视图中使用ViewBag.Teams

然而,我认为适当的解决方案是创建一个包含两个集合的适当模型:

public class MyIndexViewModel
{
    public List<CountUser> CountUsers { get; set; }
    public List<Team> Teams { get; set; }
}
public ActionResult Index(string sortOrder)
{
    var userCount = db.CountUser();
    ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : sortOrder;
    var teams = from t in db.Teams
                select t;
    switch ((string)ViewBag.NameSortParm)
    {
        case "name_desc":
            teams = teams.OrderByDescending(t => t.TeamName);
            break;
        default:
            teams = teams.OrderBy(t => t.TeamName);
            break;
    }
    return View(new MyIndexViewModel { CountUsers = userCount.ToList(), Teams = teams.ToList() });
}

此外,您还需要将视图中的模型类型更改为MyIndexViewModel