ASP.Net MVC MVCPaging错误尝试在使用寻呼机时过滤结果

时间:2013-07-17 15:03:18

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

我从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?)

有人能看到我做错了吗?

谢谢Mark,

1 个答案:

答案 0 :(得分: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,这意味着它在编译时获取其类型,当它获得第一个值时。当你传递一个查询的结果时,它变成类型IQueryable<FGBS.Models.Customer>,之后,你尝试传递ToPagedList的结果,即IPagedList,并且运行时无法隐式转换它,因为你可能得到一些数据丢失了。尝试使用不同的变量。或者你可以:

return View(items.OrderByDescending(a => a.OfferCreatedOn).ToPagedList(page ?? 0, pageSize));