如何在视图中公开多个列表模型
本文关键字:列表 模型 视图 | 更新日期: 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();
}
}