我从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,
答案 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));