命令上升列表错误asp.net

时间:2017-02-03 11:59:20

标签: c# asp.net linq model-view-controller ef-code-first

大家好我正在构建一个允许用户提交帖子的应用程序,我试图按升序在列表中使用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>
}

2 个答案:

答案 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();