2014-11-06 79 views
-1

我试着在我的项目中使用视图模型,但我有此错误:模型产品类型PagedList.PagedList [],但本词典需要类型的模型项目

The model item passed into the dictionary is of type 'PagedList.PagedList 1[ContosoUniversity.Models.Course]', but this dictionary requires a model item of type '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); 
    } 

查看:

@model IEnumerable<ContosoUniversity.ViewModels.CourseViewModel> 
@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) { 
    <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> 


@Html.PagedListPager((IPagedList)Model, page => Url.Action("Index", new { page })) 

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

+1

错误是不言自明的,请尝试 明白它。在你的控制器中放置断点并检查各种变量的内容。 – CodeCaster 2014-11-06 10:38:59

回答

1

您正在通过型号PagedList.PagedList1<ContosoUniversity.Models.Course>的型号,而您的查看是强制输入IEnumerable<ContosoUniversity.ViewModels.CourseViewModel>

您需要通过从行动IEnumerable<T>或设置视图模型PagedList<T>或者您可以通过以下方式包裹它一个ViewModel内解决这个问题:

public class CoursesVM 
{ 
    public PagedList.IPagedList<CourseViewModel> Courses { 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); 
} 

并在视图:

@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> 
+0

谢谢,但现在不同的错误:CS1579:foreach语句不能对'ContosoUniversity.ViewModels.CourseViewModel'类型的变量进行操作,因为'ContosoUniversity.ViewModels.CourseViewModel'不包含'getEnumerator'的公共定义 – Warlock 2014-11-06 11:03:18

+0

您正在迭代错误迭代其属性列表不在单个对象上 – 2014-11-06 11:20:01

相关问题