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处理这个?任何帮助都会得到预防!
错误消息非常清楚.您的视图是强类型的,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)