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

Ash*_*old 2 c# ienumerable foreach razor asp.net-mvc-4

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

public class DataModel
{        
    public List<ServerStats> statsPerMonthPerServer { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是类ServerStats:

public class ServerStats
{               
    public string ServerID { get; set; }
    public List<ColumnData> ServerMonthStats { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是ColumnData类:

public class ColumnData
{
    public string Date { get; set; }
    public double Sum { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我已经设法构建我的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 />
    }
}    
}
Run Code Online (Sandbox Code Playgroud)

我构建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);
Run Code Online (Sandbox Code Playgroud)

我得到的错误:传递到字典中的模型项是'WebApp.Models.DataModel'类型,但是这个字典需要一个类型为'System.Collections.Generic.IEnumerable`1 [WebApp.Models.DataModel]'的模型项. .

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

Dar*_*rov 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 />
    }
} 
Run Code Online (Sandbox Code Playgroud)