C# Viewbag仅从循环的最终迭代中获取信息

C# Viewbag仅从循环的最终迭代中获取信息,c#,asp.net-mvc,visual-studio,C#,Asp.net Mvc,Visual Studio,我正在尝试循环浏览一个列表,并将内容放入一个viewbag中。我的问题是,当我在视图中抓取viewbag时,它只显示循环最后一次迭代的内容。对正在发生的事情有什么想法吗?以下是一个例子: var output = new List<AirportsInACity>(); foreach (var airport in cities) { var temp = new AirportsInACity(); temp.airportName = airport.n

我正在尝试循环浏览一个列表,并将内容放入一个viewbag中。我的问题是,当我在视图中抓取viewbag时,它只显示循环最后一次迭代的内容。对正在发生的事情有什么想法吗?以下是一个例子:

var output = new List<AirportsInACity>();

foreach (var airport in cities)
{
     var temp = new AirportsInACity();

     temp.airportName = airport.name
     temp.aircraftList = new List<AirportAircraftTypeList>();

     foreach (aircraft in airport.aircraftTypes)
     {
         aircraftTemp = new AirportAircraftTypeList();
         aircraftTemp.aircraftType = aircraft.AircraftType.AircraftTypeModel;
         aircraftTemp.seats = aircraft.Seats;
         aircraftTemp.attendants = aircraft.Attendants;

         temp.aircraftList.Add(aircraftTemp);

     }

     output.Add(temp);

     var outputStats = temp.AircraftList.GroupBy(p => p.aircraftType);

     foreach (var item in outputStats)
     {
         ViewBag.AirportName = temp.name;
         ViewBag.AirportAircraftType = item.Key;
         ViewBag.AircraftSeatsSum = item.Sum(p => p.seats);
     }
 }

 ViewBag.Output = output;
 return PartialView(output);

创建ExpandoObject并将其添加到详细信息列表中

例如:

控制器代码:

List<dynamic> Details = new List<dynamic>();

 foreach (var item in outputStats)
                {
                   dynamic detail;

                   detail = new ExpandoObject();
                   detail.AirportName  =temp.name;
                   detail.AirportAircraftType  = item.Key;
                   detail.AircraftSeatsSum =item.Sum(p => p.seats);

                  Details.Add(detail);
                }

ViewBag.Details = Details;
List Details=新列表();
foreach(outputStats中的变量项)
{
动态细节;
详细信息=新的ExpandoObject();
detail.AirportName=临时名称;
detail.AirportAircraftType=item.Key;
detail.Aircrafts座位总数=项目总数(p=>p座位);
详细信息。添加(详细信息);
}
ViewBag.Details=详细信息;
查看代码:

@foreach (dynamic detail in ViewBag.Details)
{
   <td>@(detail.AirportName)</td>
        <td>@(detail.AirportAircraftType)</td>
        <td>@(detail.AircraftSeatsSum)</td>
}
@foreach(ViewBag.Details中的动态细节)
{
@(详情:AirportName)
@(详细信息:飞机类型)
@(详情:飞机座位总数)
}

查看包上的输出
您有一个类型列表
AirportsNacity
,具有以下属性:
airportName
AirportAircraftList
是类型列表
AirportAirportAircraftTypeList
。接下来,将一个
foreach
放入“outputStat”,该设置始终与相同的ViewBag项目

您必须创建一个新的viewmodel,其中放置
outputStats

public class AircraftViewModel
{
    public string AirportName {get; set; }

    public string AirportAircraftType {get; set;}

    public int AircraftSeatsSum {get; set; }
}

[..]

var outputStats = temp.AircraftList.GroupBy(p => p.aircraftType);
List<AircraftViewModel> vm = new List<AircraftViewModel>();

     foreach (var item in outputStats)
     {
         var aircraft = new AircraftViewModel();
         aircraft.AirportName = temp.name;
         aircraft.AirportAircraftType = item.Key;
         aircraft.AircraftSeatsSum = item.Sum(p => p.seats);
         vm.Add(aircraft);
     }
 }

 ViewBag.Output = vm;
公共级飞机视图模型
{
公共字符串AirportName{get;set;}
公共字符串AirportAiraftType{get;set;}
public int AircraftsSeatssum{get;set;}
}
[..]
var outputStats=临时飞机列表.GroupBy(p=>p.aircraftType);
List vm=新列表();
foreach(outputStats中的变量项)
{
var飞机=新飞机视图模型();
Airport.AirportName=临时名称;
aircraft.AirportAircraftType=项目.Key;
aircraft.Aircrafts座位总数=项目总数(p=>p.seats);
vm.Add(飞机);
}
}
ViewBag.Output=vm;

必须将项目添加到列表中,并将列表添加到视图中。如果项目已添加到列表中,则必须将列表添加到视图中。就像我提到的,在控制台中,所有正确的信息都会显示出来,只是没有显示在View@Max你能给我举个例子说明你的意思吗?我试过这个,它获取了正确的信息,但它只是从最后一个循环中获取。它并没有抓取每个airportadded循环中的细节变量,应该可以解决这个问题。
public class AircraftViewModel
{
    public string AirportName {get; set; }

    public string AirportAircraftType {get; set;}

    public int AircraftSeatsSum {get; set; }
}

[..]

var outputStats = temp.AircraftList.GroupBy(p => p.aircraftType);
List<AircraftViewModel> vm = new List<AircraftViewModel>();

     foreach (var item in outputStats)
     {
         var aircraft = new AircraftViewModel();
         aircraft.AirportName = temp.name;
         aircraft.AirportAircraftType = item.Key;
         aircraft.AircraftSeatsSum = item.Sum(p => p.seats);
         vm.Add(aircraft);
     }
 }

 ViewBag.Output = vm;