Asp.net mvc 4 传递到字典的模型项的类型为PagedList。PagedList[],但此字典需要类型为的模型项

Asp.net mvc 4 传递到字典的模型项的类型为PagedList。PagedList[],但此字典需要类型为的模型项,asp.net-mvc-4,Asp.net Mvc 4,我试图在项目中使用视图模型,但出现以下错误: 传递到字典中的模型项的类型为 “PagedList.PagedList1[ContosoUniversity.Models.Course]”,但此词典需要类型为“System.Collections.Generic.IEnumerable1[ContosoUniversity.ViewModels.CourseViewModel]”的模型项 控制器: public ActionResult Index(int? page) {

我试图在项目中使用视图模型,但出现以下错误:

传递到字典中的模型项的类型为 “PagedList.PagedList
1[ContosoUniversity.Models.Course]”,但此词典需要类型为“System.Collections.Generic.IEnumerable
1[ContosoUniversity.ViewModels.CourseViewModel]”的模型项

控制器:

public ActionResult Index(int? page)
    {
        int pageNumber = page ?? 1;

        var courses = courseService.GetAll();

        var coursesViewList = Mapper.Map<IEnumerable<Course>, IEnumerable<CourseViewModel>>(courses);

        var model = coursesViewList.ToPagedList(pageNumber, PageSize);

        return View(model);
    }
public ActionResult索引(int?页)
{
int pageNumber=第1页;
var courses=courseService.GetAll();
var coursesViewList=Mapper.Map(课程);
var模型=coursesViewList.ToPagedList(页码、页面大小);
返回视图(模型);
}
视图:

@model IEnumerable
@使用PagedList.Mvc;
@使用页面列表;
@{
ViewBag.Title=“Index”;
}
指数

@ActionLink(“新建”、“创建”)

@DisplayNameFor(model=>model.Title) @DisplayNameFor(model=>model.Credits) 学生 @foreach(模型中的var项目){ @DisplayFor(modeleItem=>item.Title) @DisplayFor(modelItem=>item.Credits) @string.Join(“,”,item.registrations.Select(e=>e.Student.FullName)) @ActionLink(“编辑”,“编辑”,新的{id=item.CourseID})| @ActionLink(“删除”,“删除”,新的{id=item.CourseID}) } @PagedListPager((IPagedList)模型,page=>Url.Action(“Index”,new{page}))

有人能帮我解决一个问题吗?

您正在传递类型为
PagedList.PagedList1
的模型,而您的视图是用
IEnumerable
强键入的

您需要将
IEnumerable
从action或set Model of View传递到
PagedList
,或者您可以通过以下方式将其包装到ViewModel中来解决此问题:

public class CoursesVM
{
    public PagedList.IPagedList<CourseViewModel> Courses { get; set; }
}
公共课程虚拟机
{
public PagedList.IPagedList课程{get;set;}
}
在行动中:

public ActionResult Index(int? page)
{
    int pageNumber = page ?? 1;

    var courses = courseService.GetAll();

    var coursesViewList = Mapper.Map<IEnumerable<Course>, IEnumerable<CourseViewModel>>(courses);

    var model = new CoursesVM();
    model.Courses = coursesViewList.ToPagedList(pageNumber, PageSize);

    return View(model);
}
public ActionResult索引(int?页)
{
int pageNumber=第1页;
var courses=courseService.GetAll();
var coursesViewList=Mapper.Map(课程);
var model=newcoursesvm();
model.Courses=coursesViewList.ToPagedList(页码、页面大小);
返回视图(模型);
}
鉴于:

@model ContosoUniversity.ViewModels.CoursesVM
@using PagedList.Mvc;
@using PagedList;


@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Title)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Credits)
        </th>
        <th>
            Students
        </th>
        <th></th>
    </tr>

@foreach (var item in Model.Courses) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Title)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Credits)
        </td>
        <td>
            @string.Join(",", item.Enrollments.Select(e => e.Student.FullName))
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.CourseID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.CourseID })
        </td>
    </tr>
}

</table>
@model ContosoUniversity.ViewModels.CoursesVM
@使用PagedList.Mvc;
@使用页面列表;
@{
ViewBag.Title=“Index”;
}
指数

@ActionLink(“新建”、“创建”)

@DisplayNameFor(model=>model.Title) @DisplayNameFor(model=>model.Credits) 学生 @foreach(Model.Courses中的var项){ @DisplayFor(modeleItem=>item.Title) @DisplayFor(modelItem=>item.Credits) @string.Join(“,”,item.registrations.Select(e=>e.Student.FullName)) @ActionLink(“编辑”,“编辑”,新的{id=item.CourseID})| @ActionLink(“删除”,“删除”,新的{id=item.CourseID}) }
这个错误是不言自明的,请尝试理解它。在控制器中放置断点并检查各种变量的内容。谢谢,但现在出现不同的错误:CS1579:foreach语句无法对“ContosUniversity.ViewModels.CourseViewModel”类型的变量进行操作,因为“ContosUniversity.ViewModels.CourseViewModel”不包含您正在使用的“getEnumerator”的公共定义迭代错误迭代其属性列表而不是单个对象
@model ContosoUniversity.ViewModels.CoursesVM
@using PagedList.Mvc;
@using PagedList;


@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Title)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Credits)
        </th>
        <th>
            Students
        </th>
        <th></th>
    </tr>

@foreach (var item in Model.Courses) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Title)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Credits)
        </td>
        <td>
            @string.Join(",", item.Enrollments.Select(e => e.Student.FullName))
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.CourseID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.CourseID })
        </td>
    </tr>
}

</table>