大家好我正在构建一个允许用户提交帖子的应用程序,我试图按升序在列表中使用orderby但我收到此错误
错误
传递到字典中的模型项的类型为'System.Linq.OrderedEnumerable'2 [myproject.Models.NewsPostVM,System.Nullable'1 [System.Int32]]',但此字典需要类型的模型项'System.Collections.Generic.List'1 [myproject.Models.NewsPostVM]'。 控制器
public ActionResult News()
{
var posts = db.NewsPosts.Select(d => new NewsPostVM()
{
ID = d.ID,
Heading = d.Heading,
Body = d.Body,
Images = d.Images.Select(i => new NewsImageVM()
{
Path = i.Path,
FileName = i.DisplayName
}).ToList()
}).ToList();
var post= posts.OrderBy(m => m.ID);
return View(post);
}
查看
@model List<MyProject.Models.NewsPostVM>
@foreach (var p in Model)
{
<div class="w3-container w3-center">
<h5><b>@p.Heading</b></h5>
<p>@p.Body</p>
@foreach (var image in p.Images)
{
<img class="img-thumbnail" width="150" height="150" src="~/Images/@image.Path" />
}
<h6>@p.Date</h6>
</div>
}
答案 0 :(得分:3)
在分配之前,您必须在模型数据上调用ToList
:
var post= posts.OrderBy(m => m.ID).ToList();
return View(post);
替代方案你可以改变你的视图模型以接受IEnumerable(如果你只是通过它与foreach一起使用,IEnumerable就可以了):
@model IEnumerable<MyProject.Models.NewsPostVM>
答案 1 :(得分:0)
因为您使用'var'作为变量类型,所以编译器选择IOrderedEnumerable作为最合适的类型。但是您的视图需要一个列表。
使用'ToList'强制结果为列表:
var post= posts.OrderBy(m => m.ID).ToList();
您可以通过指定变量类型来避免此意外行为:
IList<NewsPostVM> posts = posts.OrderBy(m => m.ID).ToList();