如何在视图中公开多个列表模型

本文关键字:列表 模型 视图 | 更新日期: 2023-09-27 18:14:42

我有一个模型,它将较小的模型作为列表:

  public class MostPlayedList
{
    public IList<MostPlayed> mostPlayed = new List<MostPlayed>();
    public IList<SongNominator> songNominator = new List<SongNominator>();
    public IList<MostUpvoted> songsUpvoted = new List<MostUpvoted>();
    public IList<MostUpvoting> userUpvoting = new List<MostUpvoting>();
}

其他模型是混合视图模型,包含与视图相关的信息。现在我使用下面的示例在控件中填充这些列表:

 MostPlayedList s = new MostPlayedList();
var mostPlayed = db.Songs.OrderBy(n => n.timesPlayed).ToList().Take(5);

然后对于找到的每个项目,我将其添加到illist中,在本例中是MostPlayed illist:

 //most played songs
        foreach (var item in mostPlayed)
        {
            s.mostPlayed.Add(new MostPlayed() { name = item.name, timePlayed = item.timesPlayed });
        }

我对其他列表项这样做,然后将其传递到部分视图,如下所示:

 return PartialView(s);

我遇到的问题是在视图上,我如何向下钻取并暴露相关的列表项?我试着在局部视图中使用这个:

@model IEnumerable<JayVumic.Models.MostPlayedList>

然后分别使用:

@foreach (var item in Model.) {

但这似乎不起作用,暴露这个模型并循环遍历给定illist的数据的最佳方法是什么?

如何在视图中公开多个列表模型

如果你想单独处理每个列表,你应该按照Dmitry在评论中的建议去做。创建4个foreach循环,并显示每个集合必须显示的内容。

@foreach (var item in Model.mostPlayed ) {
...
}
@foreach (var item in Model.songNominator ) {
...
}
@foreach (var item in Model.songsUpvoted ) {
...
}
@foreach (var item in Model.userUpvoting ) {
...
}

然而,如果你的小模型共享相同的部分,你想要对待他们一样,(似乎他们没有,但认为这是一个有趣的事实为未来),你可以从中提取一个公共接口。然后你可以让MostPlayedList实现IEnumerable并返回连接列表。

public class MostPlayedList : IEnumerable<YourCommonInteface>
{
    public IList<MostPlayed> mostPlayed = new List<MostPlayed>();
    public IList<SongNominator> songNominator = new List<SongNominator>();
    public IList<MostUpvoted> songsUpvoted = new List<MostUpvoted>();
    public IList<MostUpvoting> userUpvoting = new List<MostUpvoting>();
    public IEnumerator<YourCommonInteface> GetEnumerator()
    {
        return mostPlayed.Concat(songNominator).Concat(songsUpvoted).Concat();
    }
    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}