在使用寻呼机时尝试筛选结果时出现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
您需要更改视图中的模型,因为您没有得到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));