2016-05-05 82 views
1

ASP.NET MVC 5アプリケーションにページネーションを使用しようとしています。 私は使用しましたX.PagedList 私は単純なオブジェクトで正しく実装しましたが、より複雑なオブジェクトで実装する際に問題があります。例えば、私がフォーラムで投稿とコメントのような関係を持っているときのように。'System.Data.Entity.Infrastructure.DbQuery'型のオブジェクトを 'PagedList.IPagedList'と入力するとキャストできません

マイモデルは、コントローラに以下の構造

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; } 
    ... 
} 

を有するビュー(PartialView)に次のコード

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); 
} 

ある関連部分は

@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を表示したいコード行のビューにあるようです。なぜなら、エラーが表示されないようにするためです。

この場合、私は何ができますか?

答えて

2

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(....` 
+0

ありがとう! ToPagedListはlistOfReportsで直接動作すると思った – Endri

関連する問題