C# MVC.NET框架中的分页不工作,如何使其工作

C# MVC.NET框架中的分页不工作,如何使其工作,c#,asp.net-mvc,linq,paging,C#,Asp.net Mvc,Linq,Paging,我尝试使用实体框架将旧的asp.net webforms应用程序转换为MVC应用程序。我使用scaffold DbContect命令生成了这个应用程序的模型,该命令是EF核心工具的一部分。我能够生成一个项目列表。在本例中,我正在转换旧的issuetracker系统。该列表是已注册bug的列表。但这是一个相当长的列表(5K+记录),所以我想添加分页。我发现第三个答案似乎对我有用 因此,我在控制器索引操作中添加了下一个代码 public ActionResult Index(int page =

我尝试使用实体框架将旧的asp.net webforms应用程序转换为MVC应用程序。我使用scaffold DbContect命令生成了这个应用程序的模型,该命令是EF核心工具的一部分。我能够生成一个项目列表。在本例中,我正在转换旧的issuetracker系统。该列表是已注册bug的列表。但这是一个相当长的列表(5K+记录),所以我想添加分页。我发现第三个答案似乎对我有用

因此,我在控制器索引操作中添加了下一个代码

  public ActionResult Index(int page = 0)
    {

        int pageSize = 10;

        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)
        .AsNoTracking()
        .AsQueryable();

        var count = qry.Count();

        var data = qry.Skip(page * pageSize).Take(pageSize).OrderBy(e => e.BgId);

        this.ViewBag.MaxPage = (count / pageSize) - (count % pageSize == 0 ? 1 : 0);

        this.ViewBag.Page = page;

        return View(data.ToList());
    }
问题是,我没有得到任何结果。如果我调试数据变量的计数为10,但没有输出。
如果我不过滤,只在我的返回视图()中使用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));
    }
我必须更改视图以使其与以下页面列表帮助程序配合使用:

@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", "Bugs",new { id = item.BgId })" class="fa fa-edit"></a>
                            <a href="@Url.Action("Delete", "Bugs",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>
@model PagedList.IPagedList
@使用PagedList.Mvc;
@{
ViewBag.Title=“发行列表”;
}
@ActionLink(“添加”、“创建”、“bug”、null、新建{@class=“btn btn success mr-sm-2”})
打开此选择菜单
一个
两个
三
身份证件
描述
报告人
报道
地位
优先
组织
类别
项目
@foreach(模型中的var项目)
{
@DisplayFor(modelItem=>item.BgId)
@DisplayFor(modeleItem=>item.BgShortDesc)
@DisplayFor(modelItem=>item.ReportedUser.UsUsername)
@DisplayFor(modelItem=>item.BgReportedDate)
@DisplayFor(modelItem=>item.Status.StName)
@DisplayFor(modelItem=>item.Priority.PrName)
@DisplayFor(modelItem=>item.Organization.OgName)
@DisplayFor(modelItem=>item.Category.CtName)
@DisplayFor(modelItem=>item.Project.PjName)
}

@Model.PageCount的@页(Model.PageCountUrl.Action(“索引”), 新建{page,sortOrder=ViewBag.CurrentSort,currentFilter=ViewBag.currentFilter})

我不能马上让它工作。它只向我展示了有时候一张唱片有时候4张,非常不可预测。当我尝试调试时,我看到一个错误,如:“已经有一个与此连接相关联的打开的DataReader,必须先关闭。”当我搜索答案时,我遇到一个站点,该站点建议使用ToList()函数和include()选项。这解决了我的寻呼问题。希望这也能帮助其他人。

ViewBag很乱。。。绑定模型。(并使用PagedList助手类/函数!)您可以直接从VS dependency manager添加它。最终,您的模型(.cs文件)中的项目将存储页面#、每页结果、排序等内容。。。任何与保存的视图状态相关的东西…模型绑定:对于您的问题,我认为这是因为您有一个var(编译器决定类型)。。。尝试使用var data=qry.Skip(page*pageSize).Take(pageSize).OrderBy(e=>e.BgId).ToList();我认为“ToList()”将使查询实际运行,而不是延迟。不需要AsQueryable()<代码>订购人应放在
跳过
之前。还使用实际生成的查询更新问题。如果问题仍然存在,请尝试逐条注释。@SvyatoslavDanyliv感谢您的回复,但根据前面的注释,我选择使用现在正在工作的页面列表帮助器。