Part 64 - MVC Sorting 排序

本文的效果是在 Part 62,及63 的基础上实现的。

实现效果:

       1. Name 和 Gender 列必须是可点击的超链接。

        2. 点击 Name 或 Header,就可以实现排序功能, 如果没有点击 Name 或 Header, 则该列的数据以升序排列,如果点击了该列,数据降序排列 。

        3. 默认情况下,数据按“Name”升序排列。

      

步骤(在part63代码的基础上):1,将原来的Index方法的代码(如下):

public ActionResult Index(string searchBy, string search, int? page)
{
    if (searchBy == "Gender")
    {
        return View(db.Employees.Where(x => x.Gender == search || search ==null).ToList().ToPagedList(page ?? 1, 3));
    }
    else
    {
        return View(db.Employees.Where(x => x.Name.StartsWith(search) || search ==null).ToList().ToPagedList(page ?? 1, 3));
    }
}

替换成下面的代码:

public ActionResult Sort(string searchBy, string search, int? page, string sortBy)
        {
            ViewBag.SortNameParameter = string.IsNullOrEmpty(sortBy) ? "Name desc" : "";
            ViewBag.SortGenderParameter = sortBy == "Gender" ? "Gender desc" : "Gender";


            var students = db.Students.AsQueryable();


            if (searchBy == "Gender")
            {
                students = students.Where(x => x.Gender == search || search == null);
            }
            else
            {
                students = students.Where(x => x.Name.StartsWith(search) || search == null);
            }
            switch(sortBy)
            {
                case "Name desc":
                    students = students.OrderByDescending(x => x.Name);
                    break;
                case "Gender desc":
                    students = students.OrderByDescending(x => x.Gender);
                    break;
                case "Gender":
                    students = students.OrderBy(x => x.Gender);
                    break;
                default:
                    students = students.OrderBy(x => x.Name);
                    break;
            }
            return View(students.ToPagedList(page ?? 1,3));
        }


2. 将原来的Index.cshtml中下面的代码:

<tr>
        <th>
            @Html.DisplayNameFor(model => model.First().Name)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.First().Gender)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.First().Email)
        </th>
        <th></th>
    </tr>

用下面的代码替换:

 <tr>
        <th>
            @Html.ActionLink("Name","Sort",new {sortBy=ViewBag.SortNameParameter, searchBy=Request.QueryString["searchBy"],search= Request.QueryString["search"] })
        </th>
        <th>
            @Html.ActionLink("Gender", "Sort", new { sortBy = ViewBag.SortGenderParameter, searchBy = Request.QueryString["searchBy"], search = Request.QueryString["search"] })
        </th>
        <th>
            @Html.DisplayNameFor(model => model.First().Email)
        </th>
        <th></th>
    </tr>







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值