2

私は 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);

エラー: The model item passed into the dictionary is of type 'WebApp.Models.DataModel', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[WebApp.Models.DataModel]' .

私はリストを使用していますが、これは辞書だと言っていますが、それは私のリストについて話していると思います。IEnumerable インターフェイスについていくつか読んだことがあります。DataModel 以外のすべてのクラスに実装する必要がありますか? ビューの上部にあるモデル宣言がこれを処理したと思いましたか? どんな助けも高く評価されます!

4

1 に答える 1

5

エラーメッセージは非常に明確です。ビューは厳密に型指定されてIEnumerable<DataModel>いますが、コントローラー アクションからビューに渡されたDataModelインスタンスは 1 つだけです。私はあなたがこれを意味したと思います:

@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 />
    }
} 
于 2013-06-03T12:45:22.217 に答える