0

我从 NuGet ( https://github.com/martijnboland/MvcPaging )安装了 MVCPaging

我想在我的记录集上启用搜索/过滤器以及分页,所以这就是我想出的:

  public ActionResult Index(string str, int? page)
    {
        int pageSize = page.HasValue ? page.Value - 1 : 0;

        // Get initial recordset
        var items = db.Customers.OrderByDescending(a => a.OfferCreatedOn).Include(a => a.Offers);

        // check if searchstring has any value, and filter if so
         if (!string.IsNullOrWhiteSpace(str))
        {
            items = items.Where(t => (t.CustomerName.ToLower().IndexOf(str.ToLower()) > -1) 
                || (t.OfferReference.ToLower().IndexOf(str.ToLower()) > -1)
                || (t.EmailAddress.ToLower().IndexOf(str.ToLower()) > -1)
            );
        }

        // Pass remaining list to the pager
        //
        // Error on the next line
        //
        items = items.OrderByDescending(a => a.OfferCreatedOn)
             .ToPagedList(page ?? 0, pageSize);

        return View(items);
}

但是,我在最后一行遇到错误:

Cannot implicitly convert type 'MvcPaging.IPagedList<FGBS.Models.Customer>' to 'System.Linq.IQueryable<FGBS.Models.Customer>'. An explicit conversion exists (are you missing a cast?)

谁能看到我做错了什么?

谢谢你,马克

4

1 回答 1

1

您需要更改视图中的模型,因为您没有获得 IEnumerable,而是获得了 IPagedList,它与客户列表一起公开了 HasPreviousPage、PageNumber、PageCount 等属性,这就是您使用的实现页面导航逻辑。

例子:

@model PagedList.IPagedList<Customer>
@foreach (var item in Model)
{
    @Html.DisplayForModel()
}
@if (Model.HasPreviousPage)
{
    <li>@Html.ActionLink("<", null, new { page = Model.PageNumber - 1})</li>
}

更新

抱歉,乍一看没有理解错误。错误是您将items变量定义为 var,这意味着它在编译时解析其类型,当它获得第一个值时。当您将查询结果传递给它时,它变为 type IQueryable<FGBS.Models.Customer>,之后,您尝试传递 ToPagedList 的结果,即 IPagedList,并且运行时无法隐式转换它,因为您可能会丢失一些数据。尝试为此使用不同的变量。或者你可以:

return View(items.OrderByDescending(a => a.OfferCreatedOn).ToPagedList(page ?? 0, pageSize));
于 2013-07-17T15:12:36.823 回答