【问题标题】:How to expose multiple list models in a view如何在视图中公开多个列表模型
【发布时间】:2014-07-23 21:05:54
【问题描述】:

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

  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);

然后对于找到的每个项目,我添加到 IList,在本例中为 MostPlayed IList:

 //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.) {

但这似乎不起作用,公开此模型并循环遍历给定 IList 的数据的最佳方法是什么?

【问题讨论】:

  • 也许您应该使用 @model JayVumic.Models.MostPlayedList 并使用 @foreach (var item in Model.mostPlayed) 对其进行迭代,因为您将单个 MostPlayedList 对象传递给查看,而不是枚举
  • 德米特里是对的......如果是这样的话,QED

标签: c# asp.net-mvc entity-framework asp.net-mvc-5


【解决方案1】:

如果您想单独处理每个列表,您应该按照 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 并返回连接列表。比你只能在 Model 上使用一个 foreach 循环。

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();
    }
}

【讨论】:

  • 谢谢,这似乎是我的票。
猜你喜欢
  • 1970-01-01
  • 2020-02-07
  • 2014-07-05
  • 2022-01-13
  • 1970-01-01
  • 2013-04-06
  • 2018-09-12
  • 2021-10-11
  • 2013-12-18
相关资源
最近更新 更多