循环遍历对象内的对象列表

时间:2013-06-03 12:43:23

标签: c# asp.net-mvc-4 razor foreach ienumerable

我正在使用mvc,我将名为DataModel的类作为我的模型传递给视图:

public class DataModel
{        
    public List<ServerStats> statsPerMonthPerServer { get; set; }
}

这是类ServerStats:

public class ServerStats
{               
    public string ServerID { get; set; }
    public List<ColumnData> ServerMonthStats { get; set; }
}

这是ColumnData类:

public class ColumnData
{
    public string Date { get; set; }
    public double Sum { get; set; }
}

我已经设法构建我的ModelData对象,如果我调试它,它看起来像我想要的信息,但我无法设法从视图中打印出来。这就是我试图做的事情:

查看:

@model IEnumerable<WebApp.Models.DataModel>
@foreach (var server in Model)
{
foreach (var month in server.statsPerMonthPerServer)
{
    @month.ServerID
    foreach (var column in month.ServerMonthStats)
    {
        @column.Date <br />
        @column.Sum <br />
    }
}    
}

我构建DataModel并将其发送到视图的控制器:

DataModel dm = new DataModel();
dm.statsPerMonthPerServer = new List<ServerStats>();

foreach (var row in serverStats)
        {
                ServerStats ss = new ServerStats();
                ss.ServerID = row.ServerID;
                ss.ServerMonthStats = new List<ColumnData>();
                ColumnData cd = new ColumnData();
                cd.Date = row.Year.ToString() + "-" + row.Month.ToString();
                cd.Sum = row.ServerSum;
                ss.ServerMonthStats.Add(cd);                    
                dm.statsPerMonthPerServer.Add(ss);

        }


        return View(dm);

我得到的错误: 传递到字典中的模型项的类型为“WebApp.Models.DataModel”,但此字典需要类型为“System.Collections.Generic.IEnumerable`1 [WebApp.Models.DataModel]”的模型项。

我正在使用列表,但它说这是一本字典,但我认为它是在讨论我的列表。我已经阅读了一些关于IEnumerable接口的内容。我是否必须在除DataModel之外的所有类上实现它?我认为在视图顶部的模型decleration处理这个?任何帮助都会得到预防!

1 个答案:

答案 0 :(得分:5)

错误信息非常清楚。您的视图强类型为IEnumerable<DataModel>,但是从您的控制器操作中,您只将一个DataModel实例传递给视图。我想你的意思是:

@model WebApp.Models.DataModel
@foreach (var month in Model.statsPerMonthPerServer)
{
    <h3>@month.ServerID</h3>
    @foreach (var column in month.ServerMonthStats)
    {
        @column.Date <br />
        @column.Sum <br />
    }
}