无法将类型 'System.Data.Entity.Infrastructure.DbQuery' 的对象转换为类型 'PagedList.IPagedList'
Unable to cast object of type 'System.Data.Entity.Infrastructure.DbQuery' to type 'PagedList.IPagedList'
我正在尝试为 ASP.NET MVC 5 应用程序使用分页。
我用过 X.PagedList
我已经在一个简单的对象中正确地实现了它,但是在使用更复杂的对象实现它时遇到了问题。例如,当我在论坛中有诸如帖子和评论之类的关系时。
我的模型具有以下结构
public class PublicReport
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int PublicReportID { get; set; }
public string Title { get; set; }
...
public virtual Institutions Institution { get; set; }
...
}
public class Institutions
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int InstitutionID { get; set; }
public string Name { get; set; }
...
}
控制器中有如下代码
public ActionResult ListReports(int? page)
{
var pageNumber = page ?? 1;
var listOfReports = db.PublicReport.OrderByDescending(d => d.CreatedDate).Where(c => c.CategoryId == 1).ToList();
listOfReports.ToPagedList(pageNumber, 3);
return View("ReportList", listOfReports);
}
在视图(PartialView)中相关部分是
@model IEnumerable<RENJK.Models.PublicReport>
@using PagedList.Mvc;
@using PagedList;
@foreach (var item in Model)
{
<div class="consult-post-sec">
<div class="row">
<div class="col-sm-12">
<p>@Html.DisplayFor(modelItem => item.Title)</p>
<div class="consult-posts-by">
@Html.DisplayFor(modelItem => item.Institution.Name)
</div>
</div>
</div>
</div>
}
@Html.PagedListPager((IPagedList)Model, page => Url.Action("Index", new { page }), PagedListRenderOptions.OnlyShowFivePagesAtATime)
我得到的错误是
Unable to cast object of type 'System.Collections.Generic.List`1[RENJK.Models.PublicReport]' to type 'PagedList.IPagedList'.
问题似乎出在我想显示 ListPager 的代码行的视图中,因为如果我删除它,错误将不会显示。
遇到这种情况我该怎么办?
您没有将 ToPagedList()
的结果分配给变量(因此不返回 IPagedList<PublicReport>
,只是 IEnumerable<PublicReport>
)。将您的代码更改为
public ActionResult ListReports(int? page)
{
var pageNumber = page ?? 1;
var listOfReports = db.PublicReport.OrderByDescending(d => d.CreatedDate).Where(c => c.CategoryId == 1).ToList();
var pagedList = listOfReports.ToPagedList(pageNumber, 3); // modify
return View("ReportList", pagedList ); // modify
}
另请注意,您在视图中的模型应该是
@model IPagedList<RENJK.Models.PublicReport>
然后就不需要case了。可以只是
@Html.PagedListPager(Model, page => Url.Action(....`
我正在尝试为 ASP.NET MVC 5 应用程序使用分页。 我用过 X.PagedList 我已经在一个简单的对象中正确地实现了它,但是在使用更复杂的对象实现它时遇到了问题。例如,当我在论坛中有诸如帖子和评论之类的关系时。
我的模型具有以下结构
public class PublicReport
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int PublicReportID { get; set; }
public string Title { get; set; }
...
public virtual Institutions Institution { get; set; }
...
}
public class Institutions
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int InstitutionID { get; set; }
public string Name { get; set; }
...
}
控制器中有如下代码
public ActionResult ListReports(int? page)
{
var pageNumber = page ?? 1;
var listOfReports = db.PublicReport.OrderByDescending(d => d.CreatedDate).Where(c => c.CategoryId == 1).ToList();
listOfReports.ToPagedList(pageNumber, 3);
return View("ReportList", listOfReports);
}
在视图(PartialView)中相关部分是
@model IEnumerable<RENJK.Models.PublicReport>
@using PagedList.Mvc;
@using PagedList;
@foreach (var item in Model)
{
<div class="consult-post-sec">
<div class="row">
<div class="col-sm-12">
<p>@Html.DisplayFor(modelItem => item.Title)</p>
<div class="consult-posts-by">
@Html.DisplayFor(modelItem => item.Institution.Name)
</div>
</div>
</div>
</div>
}
@Html.PagedListPager((IPagedList)Model, page => Url.Action("Index", new { page }), PagedListRenderOptions.OnlyShowFivePagesAtATime)
我得到的错误是
Unable to cast object of type 'System.Collections.Generic.List`1[RENJK.Models.PublicReport]' to type 'PagedList.IPagedList'.
问题似乎出在我想显示 ListPager 的代码行的视图中,因为如果我删除它,错误将不会显示。
遇到这种情况我该怎么办?
您没有将 ToPagedList()
的结果分配给变量(因此不返回 IPagedList<PublicReport>
,只是 IEnumerable<PublicReport>
)。将您的代码更改为
public ActionResult ListReports(int? page)
{
var pageNumber = page ?? 1;
var listOfReports = db.PublicReport.OrderByDescending(d => d.CreatedDate).Where(c => c.CategoryId == 1).ToList();
var pagedList = listOfReports.ToPagedList(pageNumber, 3); // modify
return View("ReportList", pagedList ); // modify
}
另请注意,您在视图中的模型应该是
@model IPagedList<RENJK.Models.PublicReport>
然后就不需要case了。可以只是
@Html.PagedListPager(Model, page => Url.Action(....`