zoukankan      html  css  js  c++  java
  • ASP.Net MVC4排序检索分页的实现

    本文包括以下部分:

    • 排序(Sorting )
    • 检索(Searching )
    • 分页(Paging)

    排序(Sorting)

    本节中以 Student 实体为例演示排序.

    在 Controller中添加排序功能

    Step 1: 打开 StudentController.cs ,使 Index() 方法如下:

    public ActionResult Index(string Sorting_Order)
    {
        ViewBag.SortingName = String.IsNullOrEmpty(Sorting_Order) ? "Name_Description" : "";
        ViewBag.SortingDate = Sorting_Order == "Date_Enroll" ? "Date_Description" : "Date";
    
    var students = from stu in db.Students select stu;
    
    switch (Sorting_Order)
        {
    case "Name_Description":
            students = students.OrderByDescending(stu=> stu.FirstName);
    break;
    case "Date_Enroll":
            students = students.OrderBy(stu => stu.EnrollmentDate);
    break;
    case "Date_Description":
            students = students.OrderByDescending(stu => stu.EnrollmentDate);
    break;
    default:
            students = students.OrderBy(stu => stu.FirstName);
    break;
        }
    return View(students.ToList());
    }

    代码中参数 Sorting_Order 为URL中动态获取. string类型,默认为升序.

    在视图中表头中添加排序超链接

    Step 2: 打开ViewsStudentIndex.cshtml ,修改代码如下:

    <p>
    @Html.ActionLink("Create New", "Create")
    </p>
    
    <table class="table">
    <tr>
    <th>
                @Html.ActionLink("First Name", "Index", new { Sorting_Order = ViewBag.SortingName })
    </th>
    <th>
                Last Name
    </th>
    <th>
                @Html.ActionLink("Enrollment Date", "Index", new { Sorting_Order = ViewBag.SortingDate })
    </th>
    <th></th>
    </tr>
    
    @foreach (var item in Model) {

    Step 3: 运行查看效果.

    Apply Sorting in MVC 5

    Step 4: 单击表头中First Name列 ,查看排序功能.

    Sorted Values in MVC 5

    检索(Searching)

    在 Controller中添加查询功能

    Step 1: 打开 StudentController.cs ,修改Index() 方法如下:

    public ActionResult Index(string Sorting_Order, string Search_Data)
    {
        ViewBag.SortingName = String.IsNullOrEmpty(Sorting_Order) ? "Name_Description" : "";
        ViewBag.SortingDate = Sorting_Order == "Date_Enroll" ? "Date_Description" : "Date";
    var students = from stu in db.Students select stu;
    
        {
            students = students.Where(stu => stu.FirstName.ToUpper().Contains(Search_Data.ToUpper())
                || stu.LastName.ToUpper().Contains(Search_Data.ToUpper()));
        }
    switch (Sorting_Order)
        {
    case "Name_Description":
            students = students.OrderByDescending(stu=> stu.FirstName);
    break;
    case "Date_Enroll":
            students = students.OrderBy(stu => stu.EnrollmentDate);
    break;
    case "Date_Description":
            students = students.OrderByDescending(stu => stu.EnrollmentDate);
    break;
    default:
            students = students.OrderBy(stu => stu.FirstName);
    break;
        }
    return View(students.ToList());
    }
    代码中我们添加了 Search_Data 参数并使用LINQ 表达式.

    在视图中添加查询按钮

    Step 2: 打开 ViewsStudentIndex.cshtml ,修改代码如下:

    <p>
    @Html.ActionLink("Create New", "Create")
    </p>
    @using (Html.BeginForm())
    {
    <p>
            Search Name: @Html.TextBox("Search_Data", ViewBag.FilterValue as string)
    <input type="submit" value="Find" />
    </p>
    }
    <table class="table">

    Step 3: 运行程序,输入检索条件.

    Searching Record in MVC

    查看检索结果

    Searched Record in MVC

    分页(Paging)

    为了演示分页功能,我们将使用PagedList.Mvc控件,你可以通过NuGet 获取安装.

    安装PagedList.Mvc NuGet Package

    Step 1: 打开 Package 管理平台, "Tools" -> "Library Package Manager".

    Step 2: 输入下列命令:

    Install-Package PagedList.Mvc

    Packge Mamanger Console in MVC

    添加分页功能

    Step 3: 打开StudentController.cs 并添加下列命名空间:

    using PagedList;

    Step 4: 修改Index() 方法如下:

    public ActionResult Index(string Sorting_Order, string Search_Data, string Filter_Value, int? Page_No)
    {
        ViewBag.CurrentSortOrder = Sorting_Order;
        ViewBag.SortingName = String.IsNullOrEmpty(Sorting_Order) ? "Name_Description" : "";
        ViewBag.SortingDate = Sorting_Order == "Date_Enroll" ? "Date_Description" : "Date";
    if (Search_Data != null)
        {
            Page_No = 1;
        }
    else
        {
            Search_Data = Filter_Value;
        }
        ViewBag.FilterValue = Search_Data;
    var students = from stu in db.Students select stu;
    if (!String.IsNullOrEmpty(Search_Data))
        {
            students = students.Where(stu => stu.FirstName.ToUpper().Contains(Search_Data.ToUpper())
                || stu.LastName.ToUpper().Contains(Search_Data.ToUpper()));
        }
    switch (Sorting_Order)
        {
    case "Name_Description":
            students = students.OrderByDescending(stu=> stu.FirstName);
    break;
    case "Date_Enroll":
            students = students.OrderBy(stu => stu.EnrollmentDate);
    break;
    case "Date_Description":
            students = students.OrderByDescending(stu => stu.EnrollmentDate);
    break;
    default:
            students = students.OrderBy(stu => stu.FirstName);
    break;
        }
    int Size_Of_Page = 4;
    int No_Of_Page = (Page_No ?? 1);
    return View(students.ToPagedList(No_Of_Page, Size_Of_Page));
    }

    在视图中添加分页控件

    Step 5: 打开 ViewsStudentIndex.cshtml ,修改代码如下:

    @model PagedList.IPagedList<Vag_Infotech.Models.Student>
    @using PagedList.Mvc;
    <link href="~/Content/PagedList.css" rel="stylesheet" />
    @{
        ViewBag.Title = "Students";
    }
    <h2>Students</h2>
    <p>
    @Html.ActionLink("Create New", "Create")
    </p>
    @using (Html.BeginForm("Index", "Student", FormMethod.Get))
    {
    <p>
            Search Name: @Html.TextBox("Search_Data", ViewBag.FilterValue as string)
    <input type="submit" value="Find" />
    </p>
    
    }
    <table class="table">
    <tr>
    <th>
    @Html.ActionLink("First Name", "Index", new { Sorting_Order = ViewBag.SortingName, Filter_Value = ViewBag.FilterValue })
    </th>
    <th>
                Last Name
    </th>
    <th>
    @Html.ActionLink("Enrollment Date", "Index", new { Sorting_Order = ViewBag.SortingDate, Filter_Value = ViewBag.FilterValue })
    </th>
    <th></th>
    </tr>
    @foreach (var item in Model) {
    <tr>
    <td>
    @Html.DisplayFor(modelItem => item.FirstName)
    </td>
    <td>
    @Html.DisplayFor(modelItem => item.LastName)
    </td>
    <td>
    @Html.DisplayFor(modelItem => item.EnrollmentDate)
    </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>
    <br />
    Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
    @Html.PagedListPager(Model, Page_No =>Url.Action("Index",
    new { Page_No, Sorting_Order= ViewBag.CurrentSortOrder, Filter_Value = ViewBag.FilterValue })) 
    注意@model 类型由List类型对象变为 PagedList 类型对象.

    Step 6: 运行程序,查看分页效果.

    Apply Paging in MVC

    Step 7: 再试一下检索功能.

    Paging in MVC

    总结

    本文演示了在ASP.NET MVC中进行排序、查询、分页功能.

  • 相关阅读:
    【知识强化】第四章 网络层 4.1 网络层的功能
    【知识强化】第三章 数据链路层 3.8 数据链路层设备
    【知识强化】第三章 数据链路层 3.7 广域网
    【知识强化】第三章 数据链路层 3.6 局域网
    【知识强化】第三章 数据链路层 3.5 介质访问控制
    【知识强化】第三章 数据链路层 3.4 流量控制与可靠传输机制
    ASP.NET MVC入门之再不学习就真的out了
    ASP.NET MVC系列:添加模型的验证规则
    ASP.NET MVC系列:为已有模型添加新的属性
    ASP.NET MVC系列:为视图添加查询功能
  • 原文地址:https://www.cnblogs.com/njl041x/p/4108693.html
Copyright © 2011-2022 走看看