请选择 进入手机版 | 继续访问电脑版
虚位以待    招租QQ:244594752    尺寸:960x60
终身VIP需技术指导请加(官方QQ :244594752 )
加入我们,终身VIP只需159元,全站下载(老客户请联系我补差价即可升级)
查看: 239|回复: 0

.net core模糊查询及分页

[复制链接]

该用户从未签到

2275

主题

2307

帖子

8021

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8021
发表于 2018-6-1 22:26:29 | 显示全部楼层 |阅读模式

在项目文件夹中,创建 PaginatedList类,然后用以下代码替换模板代码。




  • public class PaginatedList<T> : List<T>  
  •     {  
  •         public int PageIndex { get; private set; }//当前页  
  •         public int TotalPages { get; private set; }//总页数  
  •   
  •         public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)//count:总条数 ,pageIndex:当前页,pageSize:每页显示行数  
  •         {  
  •             PageIndex = pageIndex;  
  •             TotalPages = (int)Math.Ceiling(count / (double)pageSize);  
  •   
  •             this.AddRange(items);  
  •         }  
  •         //判断是否为首页  
  •         public bool HasPreviousPage  
  •         {  
  •             get  
  •             {  
  •                 return (PageIndex > 1);  
  •             }  
  •         }  
  •         //判断是否为尾页  
  •         public bool HasNextPage  
  •         {  
  •             get  
  •             {  
  •                 return (PageIndex < TotalPages);  
  •             }  
  •         }  
  •   
  •         public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)  
  •         {  
  •             var count = await source.CountAsync();  
  •             var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();  
  •             return new PaginatedList<T>(items, count, pageIndex, pageSize);  
  •         }  
  •     }  

在 StudentsController.cs 中,将 Index方法替换为以下代码。




  • public async Task<IActionResult> Index(  
  •     string sortOrder,  
  •     string currentFilter,  
  •     string searchString,  
  •     int? page)  
  • {  
  •     ViewData["CurrentSort"] = sortOrder;  
  •     ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";  
  •     ViewData["DateSortParm"] = sortOrder == "Date" ? "date_desc" : "Date";  
  •   
  •     if (searchString != null)  
  •     {  
  •         page = 1;  
  •     }  
  •     else  
  •     {  
  •         searchString = currentFilter;  
  •     }  
  •   
  •     ViewData["CurrentFilter"] = searchString;  
  •   
  •     var students = from s in _context.Students  
  •                    select s;  
  •     if (!String.IsNullOrEmpty(searchString))  
  •     {  
  •         students = students.Where(s => s.LastName.Contains(searchString)  
  •                                || s.FirstMidName.Contains(searchString));  
  •     }  
  •     switch (sortOrder)  
  •     {  
  •         case "name_desc":  
  •             students = students.OrderByDescending(s => s.LastName);  
  •             break;  
  •         case "Date":  
  •             students = students.OrderBy(s => s.EnrollmentDate);  
  •             break;  
  •         case "date_desc":  
  •             students = students.OrderByDescending(s => s.EnrollmentDate);  
  •             break;  
  •         default:  
  •             students = students.OrderBy(s => s.LastName);  
  •             break;  
  •     }  
  •   
  •     int pageSize = 3;  
  •     return View(await PaginatedList<Student>.CreateAsync(students.AsNoTracking(), page ?? 1, pageSize));  
  • }  

在 Views/Students/Index.cshtml 中,将现有代码替换为以下代码。

[javascript] view plain copy



  • @model PaginatedList<ContosoUniversity.Models.Student>  
  •   
  • @{  
  •     ViewData["Title"] = "Index";  
  • }  
  •   
  • <h2>Index</h2>  
  •   
  • <p>  
  •     <a asp-action="Create">Create New</a>  
  • </p>  
  •   
  • <form asp-action="Index" method="get">  
  •     <div class="form-actions no-color">  
  •         <p>  
  •             Find by name: <input type="text" name="SearchString" value="@ViewData["currentFilter"]" />  
  •             <input type="submit" value="Search" class="btn btn-default" /> |  
  •             <a asp-action="Index">Back to Full List</a>  
  •         </p>  
  •     </div>  
  • </form>  
  •   
  • <table class="table">  
  •     <thead>  
  •         <tr>  
  •             <th>  
  •                 <a asp-action="Index" asp-route-sortOrder="@ViewData["NameSortParm"]" asp-route-currentFilter="@ViewData["CurrentFilter"]">Last Name</a>  
  •             </th>  
  •             <th>  
  •                 First Name  
  •             </th>  
  •             <th>  
  •                 <a asp-action="Index" asp-route-sortOrder="@ViewData["DateSortParm"]" asp-route-currentFilter="@ViewData["CurrentFilter"]">Enrollment Date</a>  
  •             </th>  
  •             <th></th>  
  •         </tr>  
  •     </thead>  
  •     <tbody>  
  •         @foreach (var item in Model)  
  •         {  
  •             <tr>  
  •                 <td>  
  •                     @Html.DisplayFor(modelItem => item.LastName)  
  •                 </td>  
  •                 <td>  
  •                     @Html.DisplayFor(modelItem => item.FirstMidName)  
  •                 </td>  
  •                 <td>  
  •                     @Html.DisplayFor(modelItem => item.EnrollmentDate)  
  •                 </td>  
  •                 <td>  
  •                     <a asp-action="Edit" asp-route-id="@item.ID">Edit</a> |  
  •                     <a asp-action="Details" asp-route-id="@item.ID">Details</a> |  
  •                     <a asp-action="Delete" asp-route-id="@item.ID">Delete</a>  
  •                 </td>  
  •             </tr>  
  •         }  
  •     </tbody>  
  • </table>  
  •   
  • @{  
  •     var prevDisabled = !Model.HasPreviousPage ? "disabled" : "";  
  •     var nextDisabled = !Model.HasNextPage ? "disabled" : "";  
  • }  
  •   
  • <a asp-action="Index"  
  •    asp-route-sortOrder="@ViewData["CurrentSort"]"  
  •    asp-route-page="@(Model.PageIndex - 1)"  
  •    asp-route-currentFilter="@ViewData["CurrentFilter"]"  
  •    class="btn btn-default @prevDisabled">  
  •     Previous  
  • </a>  
  • <a asp-action="Index"  
  •    asp-route-sortOrder="@ViewData["CurrentSort"]"  
  •    asp-route-page="@(Model.PageIndex + 1)"  
  •    asp-route-currentFilter="@ViewData["CurrentFilter"]"  
  •    class="btn btn-default @nextDisabled">  
  •     Next  
  • </a>  

执行效果如下所示


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|妙想源码社区 积分提现

GMT+8, 2019-12-7 23:10 , Processed in 1.349508 second(s), 24 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2020 Comsenz Inc.

快速回复 返回顶部 返回列表
 
FDGDF
客服QQ 妙想科技 244594752
【旺旺】 点击这里给我发消息
【邮箱】
244594752@qq.com
【地址】 湖南省常德市武陵区三姑巷77
【妙想科技】 【9188qhl.com】