设为首页 加入收藏

TOP

学习ASP.NET Core Razor 编程系列十九——分页(二)
2019-09-17 18:24:48 】 浏览:66
Tags:学习 ASP.NET Core Razor 编程 系列 十九 —分页
== "Date" ? "date_desc" : "Date"; ViewData["NameSortParm"] = NameSort; ViewData["DateSortParm"] = DateSort; switch (sortOrder) { case "name_desc": books = books.OrderByDescending(s => s.Name); break; case "Date": books = books.OrderBy(s => s.ReleaseDate); break; case "date_desc": books = books.OrderByDescending(s => s.ReleaseDate); break; default: books = books.OrderBy(s => s.Name); break; } Book = await books.AsNoTracking().ToPagedListAsync(page, pageSize); //将分页结果放入ViewData供View使用 ViewData["books"] = Book; } } }

 

      代码中将总页数参数、 当前的排序顺序参数和当前的筛选器参数添加到方法签名中。

        public async Task OnGetAsync(string publish, string searchString,string sortOrder,int? pageIndex)

       第一次显示页面,或如果用户未单击分页或排序链接,则所有参数都为null。 如果单击分页链接,页面变量将包含要显示的页码。

      名为 CurrentSort 的ViewData元素提供了当前已排序的试图,因为这必须包含在分页链接中以保持排序顺序在分页时相同。

      名为 searchString的ViewData元素提供了当前已筛选的视图。为了在分页过程中维护筛选规则以及在页面重新显示的时候把筛选值恢复到文本框中,该值一定要被包含进分页链接里

      如果分页期间更改搜索字符串,显示的页会被重置为 1,因为新的筛选器可能会导致显示不同的数据。 在文本框中输入了值以及按下提交按钮搜索字符串就会改变。 在这种情况下,searchString参数不为 null。

       在OnGetAsync方法的结尾,ToPagedListAsync方法将书籍查询结果转换为支持分页的集合类型,集合中包含了刚好能放进单页的书籍实体。 然后将这个单页大小的书籍集合 传递给视图。

            Book = await books.AsNoTracking().ToPagedListAsync(page, pageSize);

    代码中的ToPagedListAsync方法获得页面数和当前页码,并对IQueryable执行语句。 当IQueryable调用ToPagedListAsync时,该方法将返回只包含在请求页里的书籍列表。 属性HasPreviousPage和HasNextPage可用来启用或禁用PreviousNext分页按钮。

      Book属性我们变更为

     public X.PagedList.IPagedList<Book> Book { get;set; }

 

      三、向书籍列表视图添加分页链接

      在Pages/Books/Index.cshtml中,用以下代码替换现有代码。 高亮代码为更改的代码。

@page
@model RazorMvcBooks.Pages.Books.IndexModel
@using X.PagedList.Mvc.Core;
@using X.PagedList.Mvc.Common;
@using X.PagedList;
<!--// 7.6及以上版本需要引入Common命名空间,以支持PagedListRenderOptions .7.5以下的版本则不需要。--> 

@{
    ViewData["Title"] = "Index";
} 

<h2>Index</h2> 
<p>
    <a asp-page="Create">Create New</a>
</p>

<form>
    <p>
        <select asp-for="Publish" asp-items="Model.Publishs">
            <option value="">All</option>
        </select>
        书籍名称
        <input type="text" name="SearchString">
        <input type="submit" value="查询" />
    </p>
</form> 

<table class="table">
    <thead>
        <tr>
            <th>
                <a asp-page="./Index" asp-route-sortOrder="@Model.NameSort">
                    @Html.DisplayNameFor(model => model.Book[0].Name)
                </a> 

            </th>
            <th>
                <a asp-page="./Index" asp-route-sortOrder="@Mo
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇.NET高级代码审计(第二课) Json.. 下一篇asp.net core系列 40 Web 应用MVC..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目