PagedList.MVC - кнопки (ссылки) страницы не работают должным образом - PullRequest
0 голосов
/ 26 августа 2018

Я хотел реализовать простую нумерацию страниц, и пакет NuGet PagedList.MVC звучал как лучшее решение для меня.ОДНАКО, когда я нажимаю на сгенерированные кнопки, чтобы перейти на 2-ю, 3-ю и т. Д. Страницу, 1-я остается активной, и все, что происходит, это обновление первой страницы, но я, очевидно, хочу, чтобы она перешла на ожидаемую страницу ... Яследуйте этим двум урокам, чтобы увидеть, все ли я сделал правильно:

Github

Microsoft

Мой контроллер:

public ActionResult Index(int? pageNumber)
    {         
            var modelList = _employeeService.GetEmployeeViewToPagedList(pageNumber);
            return View(modelList);
    }

Служебный метод, который вызывается (я знаю, что «ToPagedList ()» обычно вызывается из контроллера, но текущее состояние является результатом попытки всего, и тот факт, что я получаю «DbContext утилизирован«ошибка, если я изменяю, чтобы вернуть что-то вроде« View (modelList.ToPagedList (pageNumber, pageSize)) »из контроллера):

public IPagedList<EmployeeView> GetEmployeeViewToPagedList(int? pageNumber)
    {
        using (var _unitOfWork = UnitOfWork.GetUnitOfWork())
        {
            var list = (IQueryable<EmployeeView>)_unitOfWork.context.EmployeeViews.OrderByDescending(x => x.Id);
            return list.ToPagedList((pageNumber ?? 1), 10);
        }
    }

Мое представление:

@model PagedList.IPagedList<Company.DAL.Views.EmployeeView>
@using PagedList.Mvc;
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />

@{
    ViewBag.Title = "Index";
}

<h2>List of all employees</h2>

<p>
    @Html.ActionLink("Add new employee", "AddNewEmployee")
</p>
@if (Model != null && Model.Count() > 0)
{
    <table class="table">
        ... all needed <tr>'s, <th>'s, <td>'s ...
    </table>
    <br/>
    @Html.PagedListPager(Model, page => Url.Action("Index", new { page, pageSize = 
Model.PageSize }))
}

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

РЕДАКТИРОВАТЬ: Сгенерированный HTML:

<div class="pagination-container">
    <ul class="pagination">
        <li class="active"><a>1</a></li>
        <li><a href="/Play?page=2&amp;pageSize=3">2</a></li>
        <li><a href="/Play?page=3&amp;pageSize=3">3</a></li>
        <li class="PagedList-skipToNext"><a href="/Play?page=2&amp;pageSize=3" rel="next">»</a></li>
    </ul>
</div>

1 Ответ

0 голосов
/ 29 августа 2018

Я решил опубликовать ответ здесь, так как решил проблему, и кто-то другой может найти это полезным.Итак, в контроллере мой метод Index выглядит следующим образом:

public ActionResult Index(int? pageNumber)
{     
    //some logic
}

Как видите, он принимает переменную int с именем pageNumber в качестве параметра.Но на мой взгляд, есть следующее:

@Html.PagedListPager(Model, page => Url.Action("Index", new { page, pageSize = Model.PageSize }))

ТАК, здесь я передаю переменную с именем page в мой метод Index.Это ошибка!Переменная в списке параметров метода также должна называться page .

...