在使用寻呼机时尝试筛选结果时出现ASP.Net MVC MVC老化错误

本文关键字:MVC ASP Net 错误 老化 筛选 寻呼机 结果 | 更新日期: 2023-09-27 18:23:42

我从NuGet安装了MVCPage(https://github.com/martijnboland/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

在使用寻呼机时尝试筛选结果时出现ASP.Net MVC MVC老化错误

您需要更改视图中的模型,因为您没有得到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));