【问题标题】:PagedList.MVC - Page buttons(links) don't work as expectedPagedList.MVC - 页面按钮(链接)不能按预期工作
【发布时间】:2018-08-26 02:39:44
【问题描述】:

我想实现一个简单的分页,PagedList.MVC NuGet 包对我来说听起来是最好的解决方案。但是,当我单击生成的按钮转到第二、第三等页面时,第一个仍然处于活动状态,所发生的只是刷新第一页,但我显然希望它导航到预期的页面...... 我按照这两个教程来看看我是否做对了所有事情:

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

这几天我一直在尝试解决这个问题,我得到的最接近的是this question,但我不确定在哪里可以找到那个 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>

【问题讨论】:

  • 您显示的代码应该可以正常工作。为您的页码链接生成的实际 html 是什么?
  • @StephenMuecke 查看上面生成的 HTML。
  • @Html.PagedListPager(...)中删除pageSize = Model.PageSize
  • @StephenMuecke 我希望这能奏效,但至少我的网址现在看起来好多了。
  • @AlexiAmni 我发现了我的错误,这是一个愚蠢的错误,但我花了比我想承认的更多的时间。我的控制器中的索引方法接受一个名为“pagedNumber”的 int 变量,但在我的 Razor 视图中,我从辅助方法传递了一个名为“page”的变量。它们必须具有相同的名称!

标签: c# asp.net .net asp.net-mvc pagedlist


【解决方案1】:

我决定在这里发布答案,因为我解决了这个问题,其他人可能会觉得这很有用。 因此,在控制器中,我的 Index 方法如下所示:

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

如您所见,它接受一个名为 pageNumber 的 int 变量作为参数。 但是在我看来是这样的:

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

所以,我在这里将一个名为 page 的变量传递给我的 Index 方法。 那是错误!方法参数列表中的变量也必须命名为page

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 2018-04-09
    • 2015-06-26
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多