0

我正在尝试为列表生成自定义分页。

我想要的是-

-我有一个控制器,它通过使用方法的10LINQ 查询仅返回数据库中的行。Take()- 加载视图时显示 10 行,接下来我很好奇的是分页。

虽然 pagesize 设置为10rows 并且如果它超过10; 我正在尝试显示来自数据库的 10 条记录next的列表按钮。Previous

我尝试以这种方式映射它-

控制器

public ViewResult _SeeAllLedger(LedgerModel user) {
            List<LedgerModel> ledger = null;

            if (ModelState.IsValid) {
                ledger = (from u in db.LedgerTables
                          select new LedgerModel {
                              AccID = u.AccID,
                              AccountHead = u.AccountHead,
                              Place = u.Place,
                              SerialNo = Convert.ToInt32(u.SerialNumber)
                          }).ToList();

            }

            return View(ledger.Take(10)); //Returning 10 records
        }

看法-

@foreach (var item in Model) {

        <tr class="ladger-details">
            <td>
                @Html.DisplayFor(modelItem => item.AccID)
            </td>
            <td>
                <a href="@Html.DisplayFor(modelItem => item.AccountHead)">@Html.DisplayFor(modelItem => item.AccountHead)</a>
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Place)
            </td>
                   </tr>
        if (Model.Count > 10) {
            <a class="btn btn-success">Next</a> //Trying to show custom button only if this state is true
        }
    }

正如我所料,它不起作用,从 LINQ 查询映射行的其他方法是什么?

4

2 回答 2

1

我认为你错过了很多让这项工作正常工作的部分。主要是,您总是记录相同的 10 条记录。这应该可以帮助您找到正确的方向。

您将(至少)需要知道页码和页面大小(在您的情况下为 10)。如果您希望它更有用,排序列和排序方向也会有所帮助。

ledger = (from u in db.LedgerTables
   select new LedgerModel {
        AccID = u.AccID,
        AccountHead = u.AccountHead,
        Place = u.Place,
        SerialNo = Convert.ToInt32(u.SerialNumber)
    }).Skip(pageNum * pageSize).Take(pageSize).ToList();

我使用 ViewBag 来跟踪当前页面、页面大小和总记录,以便循环浏览并为所有页面构建链接。

于 2013-09-21T18:13:02.517 回答
0

为什么不使用 ASP.Net PageList?

http://www.nuget.org/packages/PagedListExt.Mvc4/

于 2013-09-21T18:16:27.567 回答