Невозможно привести объект типа «System.Data.Entity.Infrastructure.DbQuery» к типу «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) 

Ошибка, которую я получаю,

Невозможно привести объект типа «System.Collections.Generic.List`1[RENJK.Models.PublicReport]» к типу «PagedList.IPagedList».

Проблема, кажется, в представлении в строке кода, где я хочу отобразить ListPager, потому что ошибка не будет отображаться, если я ее удалю.

Что я могу сделать в этом случае?


person Endri    schedule 05.05.2016    source источник


Ответы (1)


Вы не присваиваете результаты 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>

а тут и дела не надо. Это может быть просто

@Html.PagedListPager(Model, page => Url.Action(....`
person Community    schedule 05.05.2016
comment
Спасибо! Я думал, что ToPagedList работает непосредственно с listOfReports - person Endri; 05.05.2016