MVC之数据列的排序功能的实现

接着分页功能的基础上,补充点击表头字段进行降序/升序排序的功能。
1.重写Home控制器中的Index动作方法:

 public ActionResult Index(string search, string searchby, int? page, string sortBy)
        {
            //给sortByXXX做一个初始化赋值操作,用于页面加载时
            ViewBag.sortByName = string.IsNullOrEmpty(sortBy) ? "Name desc" : "";
            ViewBag.sortByGender = sortBy == "Gender" ? "Gender desc" : "Gender";
            ViewBag.sortByAge = sortBy == "Age" ? "Age desc":"Age";
            var emp = dbe.Employee.AsQueryable();//1.查询所有Employee记录

            //2.按Name或Gender类别进行过滤处理,否则不过滤
            if (searchby == "Name")//按Name查询,如果未输入直接查询,则查询所有数据
            {
                emp = emp.Where(e => e.Name.StartsWith(search) || search == null);
            }
            else
            {//按Gender进行查询,如果未输入直接查询,则查询所有数据
                emp = emp.Where(e => e.Gender == search || search == null);
            }

            //3.排序处理
            switch (sortBy) {
                case "Name desc":
                    emp = emp.OrderByDescending(o => o.Name);
                    break;
                case "Gender desc":
                    emp = emp.OrderByDescending(o=>o.Gender);
                    break;
                case "Gender":
                    emp = emp.OrderBy(o=>o.Gender);
                    break;
                case "Age desc":
                    emp = emp.OrderByDescending(o=>o.Age);
                    break;
                case "Age":
                    emp = emp.OrderBy(o => o.Age);
                    break;

                default:
                    emp = emp.OrderBy(o=>o.Name);
                    break;
            }

            return View(emp.ToPagedList(page ?? 1,3));//4.传入分页后的数据
        }

修改对应的Index视图:

@using PagedList
@using PagedList.Mvc
@model IPagedList<Web_SearchDemo.Models.Employee>
@*@model IEnumerable<Web_SearchDemo.Models.Employee>*@

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{
    @Html.TextBox("search", null, htmlAttributes: new { @class = "form-control" })
    @Html.RadioButton("searchby", "Name", true) <text>Name</text>
    @Html.RadioButton("searchby", "Gender", true) <text>Gender</text>

    <input type="submit" value="Search" class="btn btn-primary" />
}
@*<p>
    @Html.ActionLink("Create New", "Create")
</p>*@
<table class="table">
    <tr>
        <th>
            @*@Html.DisplayNameFor(model => model.First().Name)*@
            @Html.ActionLink("Name","Index",new { sortBy= ViewBag.sortByName, search=Request.QueryString["search"],searchby=Request.QueryString["searchby"] })
        </th>
        <th>
            @*@Html.DisplayNameFor(model => model.First().Age)*@
            @*以url拼接字符串的形式传参*@
            @Html.ActionLink("Age", "Index", new { sortBy = ViewBag.sortByAge, search = Request.QueryString["search"], searchby = Request.QueryString["searchby"] })
        </th>
        <th>
            @Html.ActionLink("Gender", "Index", new { sortBy = ViewBag.sortByGender, search = Request.QueryString["search"], searchby = Request.QueryString["searchby"] })
        </th>
        <th></th>
    </tr>

    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Age)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Gender)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
                @Html.ActionLink("Details", "Details", new { id = item.Id }) |
                @Html.ActionLink("Delete", "Delete", new { id = item.Id })
            </td>
        </tr>
    }
</table>
@*DisplayPageCountAndCurrentLocation=true*@
@Html.PagedListPager(Model, page => Url.Action("Index", new { page, searchBy = Request.QueryString["searchby"], search = Request.QueryString["search"] }), new PagedListRenderOptions() { Display = PagedListDisplayMode.IfNeeded,DisplayItemSliceAndTotal=true })
<h3 style="color:red">@ViewBag.message</h3>

运行程序:
在这里插入图片描述
点击Age表头字段:
实现降序排序
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值