我有一个模型,它将较小的模型作为列表:
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数据的最佳方法是什么?
答案 0 :(得分: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并返回concated列表。在模型上只能使用一个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();
}
}