如何解决MVC .NET Framework中的分页不起作用,如何使其起作用
我尝试使用Entity Framework将旧的ASP.NET Web窗体应用程序转换为MVC应用程序。我使用scaffold-DbContect命令为此应用程序生成了模型,该命令是EF Core Tools的一部分。我能够生成项目列表。在这种情况下,我要转换旧的issuetracker系统。该列表是已注册错误的列表。但这是一个很长的列表(超过5K条记录),因此我想添加分页。我碰到了this item on SO,第三个答案似乎对我有用。
所以我在控制器的索引动作中添加了下一个代码
@Repository
public interface DocumentRepository extends JpaRepository<Document,Long> {
...
}
问题是,我没有结果。如果我调试数据var的计数为10,但没有输出。 如果我不过滤而只在返回View()中使用qry.ToList(),那么我会得到所有记录。也不抛出异常。我想念什么?有人知道吗?我想我忽略了一些东西。
解决方法
借助@pcalkins的帮助,我可以使用PageList.mvc帮助器解决问题。
我在操作中得到了下一个代码:
// GET: Bugs
public ActionResult Index(int? page)
{
var qry = db.Bugs
.Include(e => e.Organization)
.Include(e => e.AssignedUser)
.Include(e => e.UpdatedUser)
.Include(e => e.ReportedUser)
.Include(e => e.Project)
.Include(e => e.Category)
.Include(e => e.Status)
.Include(e => e.Priority)
.OrderBy(e => e.BgId).ToList();
int pageSize = 20;
int pageNumber = page ?? 1;
return View(qry.ToPagedList(pageNumber,pageSize));
}
我必须更改视图才能使其与以下PageList帮助器一起使用:
@model PagedList.IPagedList<IssueTracker.Models.Bugs>
@using PagedList.Mvc;
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />
@{
ViewBag.Title = "Issuelist";
}
<div class="container pt-5">
<div class="pb-2">
<form action="" class="form-inline">
@Html.ActionLink("Add","Create","Bugs",null,new { @class = "btn btn-success mr-sm-2" })
<div class="form-group mr-sm-2">
<select class="custom-select">
<option selected="">Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
</div>
<button type="button" class="btn btn-primary mr-sm-2">
<i class="fa fa-print"></i>
</button>
<button type="button" class="btn btn-primary mr-sm-2">
<i class="fa fa-file-excel-o"></i>
</button>
</form>
</div>
<div class="table-responsive">
<table class="table table-hover tauw-table table-sm" id="tauw-table">
<thead>
<tr>
<th scope="col">
ID
</th>
<th scope="col">
Description
</th>
<th scope="col">
Reported by
</th>
<th scope="col" style="width:120px">
Reported on
</th>
<th scope="col">
Status
</th>
<th scope="col">
Priority
</th>
<th scope="col">
Organisation
</th>
<th scope="col">
Category
</th>
<th scope="col">
Project
</th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<th scope="row">
@Html.DisplayFor(modelItem => item.BgId)
</th>
<td>
@Html.DisplayFor(modelItem => item.BgShortDesc)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReportedUser.UsUsername)
</td>
<td>
@Html.DisplayFor(modelItem => item.BgReportedDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Status.StName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Priority.PrName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Organization.OgName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Category.CtName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Project.PjName)
</td>
<td style="width:50px;">
<a href="@Url.Action("Edit",new { id = item.BgId })" class="fa fa-edit"></a>
<a href="@Url.Action("Delete",new { id = item.BgId })" class="fa fa-trash"></a>
</td>
</tr>
}
</tbody>
</table>
<br />
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
@Html.PagedListPager(Model,page => Url.Action("Index",new { page,sortOrder = ViewBag.CurrentSort,currentFilter = ViewBag.CurrentFilter }))
</div>
我无法立即使它工作。它只向我显示了有时一张唱片,有时是4张唱片,非常难以预测。当我尝试调试时,我看到一个错误,例如:“已经有一个与此Connection关联的打开的DataReader,必须先关闭它。”当我搜索答案时,遇到this网站,该网站建议将ToList()函数与include()选项一起使用。这解决了我的分页问题。希望这也可以帮助其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。