不包含ToPagedList的定义
本文关键字:定义 ToPagedList 包含 | 更新日期: 2023-09-27 18:07:23
当试图在我的控制器中实现PagedList时,我一直得到这个错误。准确的错误为
DataIntelligence.Models。Execution'不包含'ToPagedList'的定义,也没有扩展方法'ToPagedList'接受类型为' datainintelligence . models '的第一个参数。可以找到执行'(您是否缺少using指令或程序集引用?)'
,我不知道为什么。我看过类似的问题,但似乎找不到我想要的答案。我想知道是否有人能帮忙。
h2控制器 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));
}
执行模型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; }
}
}
<<h2>视图/h2>@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}))
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));
}
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; }
}
}
@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}))
DbSet.Find
方法返回实体的单个实例,而不是枚举。所以对它应用ToPagedList
是没有意义的。如果您确实想将其封装在分页列表中,您可以将查询更改为:
var executions = db.Executions.Where(e => e.Id == id);
这将给你一个只有一个值的IEnumerable
结果。
编辑
阅读您的评论后,似乎您实际上只想对Steps
属性进行分页。要做到这一点,您最好创建一个视图模型,而不是将数据库实体直接传递给您的视图,请注意我如何将Steps
属性的类型更改为分页列表:
public class ExecutionViewModel
{
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 PagedList.IPagedList<Step> Steps { get; set; }
}
不,你的控制器变成了这样的东西:
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);
var executionModel = new ExecutionViewModel
{
Id = execution.Id,
PackageId = execution.PackageId,
Start = execution.Start,
End = execution.End,
Successful = execution.Successful,
Steps = execution.Steps.ToPagedList(pageNumber, pageSize)
};
return View(executionModel);
}
不要忘记改变你的视图来接受新对象:
@model DataIntelligence.ViewModels.ExecutionViewModel
通过NuGet添加以下内容:
PM> Install-Package PagedList.MVC
在控制器中添加以下内容:
using PagedList;
在你看来,添加以下内容:
@using PagedList.Mvc;