C# Viewbag仅从循环的最终迭代中获取信息
我正在尝试循环浏览一个列表,并将内容放入一个viewbag中。我的问题是,当我在视图中抓取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
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;