我正在尝试为列表生成自定义分页。
我想要什么 -
- 我有一个控制器,它通过LINQ查询和10
方法从数据库返回Take()
行。
- 当加载视图时它会显示10行,我很好奇的下一件事就是分页。
页面大小设置为10
行,如果超过10
;我正在尝试显示来自数据库的next
,Previous
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查询映射行的其他方法是什么?
答案 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?