I keep getting this error when trying to implement PagedList in my Controller. The exact error reads
'DataIntelligence.Models.Execution' does not contain a definition for 'ToPagedList' and no extension method 'ToPagedList' accepting a first argument of type 'DataIntelligence.Models.Execution' could be found (are you missing a using directive or an assembly reference?)`
and I have no idea why. I have looked at similar question but can't seem to find the answer I am looking for. I was wondering if anybody could help.
Controller
using DataIntelligence.Models;
using PagedList;
using PagedList.Mvc;
using System;
using System.Linq;
using System.Web.Mvc;
public ActionResult Execution(int? page, int id = 0)
{
var execution = db.Executions.Find(id);
if (execution == null)
{
return HttpNotFound();
}
ViewBag.ExecutionSeconds = (execution.End - execution.Start).ToString(@"dd\.hh\:mm\:ss\.fff");
int pageSize = Int32.Parse(System.Configuration.ConfigurationManager.AppSettings["DefaultPageSize"]);
int pageNumber = (page ?? 1);
return View(execution.ToPagedList(pageNumber, pageSize));
}
Execution Model
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
namespace DataIntelligence.Models
{
[Table("Execution")]
public class Execution
{
public int Id { get; set; }
public Int16 PackageId { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public Boolean Successful { get; set; }
public virtual ICollection<Step> Steps { get; set; }
}
}
View
@model PagedList.IPagedList<DataIntelligence.Models.Execution>
@using PagedList.Mvc;
<link href="Content/PagedList.css" rel="stylesheet" type="text/css" />
@{
ViewBag.Title = "Execution Details";
}
<script language="javascript" type="text/javascript" src="jquery-1.8.3.js"> </script>
<script>
function goBack() {
window.history.back();
}
</script>
<div class="jumbotron">
<h2>Execution Details</h2>
</div>
<fieldset>
<legend>Execution Id - @Html.DisplayFor(model => model.Id)</legend>
<div class="row">
<div class="col-sm-3">
<div class="display-label">
@Html.DisplayNameFor(model => model.PackageId)
</div>
<div class="display-field">
<a href="@Url.Action("Package", new { id=Model.PackageId})"> @Html.DisplayFor(model => model.PackageId) </a>
</div>
</div>
<div class="col-sm-3">
<div class="display-label">
@Html.DisplayNameFor(model => model.Start)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.Start)
</div>
</div>
<div class="col-sm-3">
<div class="display-label">
@Html.DisplayNameFor(model => model.End)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.End)
</div>
</div>
<div class="col-sm-3">
<div class="display-label">
Execution Time
</div>
<div class="display-field">
@ViewBag.ExecutionSeconds
</div>
</div>
</div>
<div class="row">
<div class="col-sm-3">
<div class="display-label">
@Html.DisplayNameFor(model => model.Successful)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.Successful)
</div>
</div>
</div>
<br />
</fieldset>
<table>
<tr>
<th>
Step ID
</th>
<th id="stepname">
Name
</th>
<th id="stepdate">
Date
</th>
</tr>
@foreach (var step in Model.Steps) {
<tr>
<td>
@Html.DisplayFor(modelItem => step.Id)
</td>
<td id="steps">
@Html.DisplayFor(modelItem => step.Name)
</td>
<td id="date">
@Html.DisplayFor(modelItem => step.Date)
</td>
</tr>
}
</table>
<button class="btn btn-link" onclick="goBack()" style="padding-right: 0px; padding-top: 0px; padding-bottom: 0px; padding-left: 0px;">Back</button>
Page @(Model.Steps.PageCount < Model.Steps.PageNumber ? 0 : Model.Steps.PageNumber) of @Model.Steps.PageCount
@Html.PagedListPager(Model.Steps, page => Url.Action("Execution", new { page, sortOrder = ViewBag.CurrentSort}))
ToPagedListis a single instance of yourExecutionclass, what do you expect it to do with that? It needs to be on anIEnumerable. - DavidG