Mvc pagedlist — PagedListPager с атрибутом Id из Viewbag

Я пытаюсь использовать Pagedlist нумерацию страниц в Mvc 5. Пагинация работает нормально, однако список содержит транзакции только с определенным идентификатором. Идентификатор передается с помощью Viewbag, и появляется первый список, но когда я пытаюсь просмотреть вторую страницу списка, он не будет работать, потому что для этого требуется номер идентификатора, который не может быть нулевым. Я добавил идентификатор в Url.Action, но все равно ничего не передает. Также попытался просмотреть идентификационный номер в представлении, просто чтобы посмотреть, работает ли он, и ничего не появляется. Любое решение?

Ссылка в первом представлении, которая передает идентификационный номер и ведет к списку.

<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>

Разбивка на страницы отображается, но не может получить доступ ко второму или любому другому биту списка. Я использовал следующий проход дальше по тому же идентификационному номеру, но ничего.

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

Если я вручную наберу идентификатор в браузере, например

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, который выдаст ошибку из-за отсутствия checkAccountId


person Sugafree    schedule 12.03.2016    source источник
comment
Вы устанавливаете значение ViewBag.CheckingAccountId в методе Statement() при возврате представления? Вам нужно показать код контроллера   -  person    schedule 13.03.2016


Ответы (1)


Я понял.

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

ViewContext необходимо было добавить, чтобы получить checkingAccountId из области просмотра... а также снова объявить идентификатор в контроллере.

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);
}
person Sugafree    schedule 13.03.2016