Asp.net MVC4:自定义分页

时间:2013-09-21 17:52:50

标签: c# asp.net asp.net-mvc linq asp.net-mvc-4

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

我想要什么 -

- 我有一个控制器,它通过LINQ查询和10方法从数据库返回Take()行。 - 当加载视图时它会显示10行,我很好奇的下一件事就是分页。

页面大小设置为10行,如果超过10;我正在尝试显示来自数据库的nextPrevious 10条记录的列表按钮。

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

控制器

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查询映射行的其他方法是什么?

2 个答案:

答案 0 :(得分: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来跟踪当前页面,页面大小和总记录,以便遍历并构建所有页面的链接。

答案 1 :(得分:0)

为什么不使用ASP.Net PageList?

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