Mvc pagedlist - 来自Viewbag的具有Id属性的PagedListPager

时间:2016-03-12 13:34:29

标签: c# asp.net-mvc pagedlist

我想在Pagedlist中使用Mvc 5分页。分页工作正常,但列表仅包含具有特定ID的事务。使用Viewbag传递id并显示第一个列表,但是当我尝试查看列表的第二页时,它将无法工作,因为它需要的id号不能为null。我将id添加到Url.Action但仍未传递任何内容。还试图在视图中查看id号,只是为了查看它是否有效,什么都没有出现。任何解决方案?

在第一个视图中链接,该视图传递了ID号并指向列表。

<a href="@Url.Action("Statement", "CheckingAccount", new { checkingAccountId = ViewBag.CheckingAccountId })" class="btn btn-primary btn-lg btn-block">
    <span class="glyphicon glyphicon-print"></span> Print Statement
</a>

分页显示,但无法访问列表的第二个或任何其他位。我在下面使用了相同的id号码,但没有任何内容。

@Html.PagedListPager(Model, page => Url.Action("Statement", new { page, PageSize = Model.PageSize, checkingAccountId = ViewBag.CheckingAccountId } ))

如果我在浏览器中手动输入id,例如

statement?page=1&pageSize=4&CheckingAccountId=1

它有效,但我需要通过PagedListPager

传递它

这是我的控制器

public ActionResult Statement(int checkingAccountId, int page = 1, int pageSize = 4)
{
    var checkingAccount = db.CheckingAccounts.Find(checkingAccountId);
    List<Transaction> statement = checkingAccount.Transactions.ToList();
    ViewBag.CheckingAccountId = checkingAccountId;
    PagedList<Transaction> model = new PagedList<Transaction>(statement, page, pageSize);
    return View(model);
}

当我启动它时,它将带我到/statement?checkingAccountId=1工作并显示前4个语句,但当我试图查看语句的其余部分时,PagedListPager将只有statement?Page=1&pageSize=4 {1}}会因错过checkingAccountId

而出现错误

1 个答案:

答案 0 :(得分:1)

我明白了。

@Html.PagedListPager(Model, page => Url.Action("Statement", new { checkingAccountId = ViewContext.ViewBag.CheckingAccountId, page, PageSize = Model.PageSize } ))
需要添加

ViewContext才能从viewbag获取checkingAccountId并在控制器中再次声明id。

public ActionResult Statement(int checkingAccountId, int page = 1, int pageSize = 4)
{
    var checkingAccount = db.CheckingAccounts.Find(checkingAccountId);
    List<Transaction> statement = checkingAccount.Transactions.ToList();
    ViewBag.CheckingAccountId = checkingAccountId;
    PagedList<Transaction> model = new PagedList<Transaction>(statement, page, pageSize);
    return View(model);
}