快捷搜索:  汽车  科技

asp.netcore如何从服务器获得数据(Asp.netCore6学习笔记)

asp.netcore如何从服务器获得数据(Asp.netCore6学习笔记)public async Task OnGetAsync()观察浏览器最终的URL为:<div class="text-center"> @{ var PrevEnabled = Model.PageIndex == 1 ? "disabled" : ""; var NextEnabled = Model.PageIndex == Model.TotalPage ? "disabled" : ""; } <a asp-route-pageindex="@(Model.PageIndex-1)" asp-route-searchstring="@Model.SearchString"

示例数据模型定义:

public class Movie { public int Id { get; set; } [Display(Name = "名称")] public string Title { get; set; } = string.Empty; [DataType(DataType.Date) Display(Name = "发行日期")] public DateTime ReleaseDate { get; set; } [Display(Name = "类型")] public string Genre { get; set; } = string.Empty; [Display(Name = "价格")] public decimal Price { get; set; } }

分页要用到的几个参数:

[BindProperty(SupportsGet =true)] public int PageCount { get; set;} /*每页显示条数*/ [BindProperty(SupportsGet = true)] public int PageIndex { get; set; }/*当前页*/ public int TotalPage { get; set; }/*总页数*/

参数的计算:

//整数除以整数,舍弃小数部分, //比如10条记录,每页显示8条,整数部分为1 但实际上是2页,所以要加1 TotalPage = movies.Count() / PageCount 1; //每页显示10条,共10条记录,整数部分也为1,但实际上只有一页,就不需要加1了。 if (PageCount == movies.Count()) TotalPage = 1; if (PageIndex > TotalPage) PageIndex = TotalPage; if (PageIndex < 1) PageIndex = 1; Movie = await movies.Skip((PageIndex-1) * PageCount).Take(PageCount).ToListAsync();

核心代码:

Movie = await movies.Skip((PageIndex-1) * PageCount).Take(PageCount).ToListAsync();

表示跳过(PageIndex-1) * PageCount条记录,取PageCount个记录。

在cshtml文件中的查询部分,设置每页显示多少个:

<form> <p> 类型: <select asp-for="MovieGenre" asp-items="Model.Genres"> <option value="">全部</option> </select> 标题:<input type="text" name="SearchString" asp-for="SearchString" placeholder="请输入关键字" /> 每页<input type="number" asp-for="PageCount" max=10 min=5 />条 </p> <p> <input type="submit" class="btn btn-primary" value="查找" /> <button class="btn btn-outline-secondary"> <a asp-route-pagecount="@Model.PageCount" class="text-decoration-none" asp-page="/Movies/Index">全部</a> </button> </p> </form>

上一页、下一页、页数跳转部分

<div class="text-center"> @{ var PrevEnabled = Model.PageIndex == 1 ? "disabled" : ""; var NextEnabled = Model.PageIndex == Model.TotalPage ? "disabled" : ""; } <a asp-route-pageindex="@(Model.PageIndex-1)" asp-route-searchstring="@Model.SearchString" asp-route-moviegenre="@Model.MovieGenre" asp-route-pagecount="@Model.PageCount" class="btn btn-secondary @PrevEnabled"> 上一页 </a> <span>@((Model.PageIndex) "/" (Model.TotalPage))</span> <a asp-route-pageindex="@(Model.PageIndex 1)" asp-route-searchstring="@Model.SearchString" asp-route-moviegenre="@Model.MovieGenre" asp-route-pagecount="@Model.PageCount" class="btn btn-secondary @NextEnabled"> 下一页 </a> <form method="get" class="d-inline"> <input type="hidden" asp-for="@Model.SearchString" /> <input type="hidden" asp-for="@Model.MovieGenre" /> <input type="hidden" asp-for="@Model.PageCount" /> 到<input type="number" max="@Model.TotalPage" min=1 asp-for="PageIndex" />页 </form> </div>

总之,所有刷新页面的操作都包含了搜索条件和分页参数。无论是显示全部,还是搜索结果,都统一调用

public async Task OnGetAsync()

观察浏览器最终的URL为:

...Movies?pageindex=第几页&moviegenre=类型&title=名称&pagecount=每页记录数

在上一页、下一页按钮中

asp-route-xxx=yyy asp-route-{value} 单个 URL 路由值。 例如,asp-route-id="1234",生成的url中会包含id=1234。

在跳转到第几页的form:用隐藏控件保存参数,不知这种方法是否最优?

最终页面效果:

asp.netcore如何从服务器获得数据(Asp.netCore6学习笔记)(1)

最终页面效果

初学C#,依样画瓢,聊以为记。

猜您喜欢: