如何在一张桌子上使用两张foreach,或者另外一种方法来计算我的点数和总数?
这是表格:
<div style="padding-top: 30px">
<table id="table_id" class="display">
<thead>
<tr>
<th>Month</th>
<th>Count</th>
<th>Total</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Date1.Reverse())
{
<tr>
<td> @Html.DisplayFor(modelItem => item.theDate) </td>
<td> @Html.DisplayFor(modelItem => item.theCount) </td>
</tr>
}
@foreach (var item in Model.Date2.Reverse())
{
<tr>
<td></td>
<td></td>
<td> @Html.DisplayFor(modelItem => item.theCount) </td>
</tr>
}
</tbody>
</table>
</div>
这就是我打电话给模特的方式:
public class QueryView
{
public IEnumerable<Date1> Date1 { get; set; }
public IEnumerable<Date1> Date2 { get; set; }
}
}
@model CWebPortal.Models.QueryView
我希望道达尔当然在同一条线上。
谢谢!
答案 0 :(得分:2)
您需要并行遍历列表。
希望这些链接能够提供帮助
@using (var e1 = Model.Date1.Reverse().GetEnumerator())
{
using (var e2 = Model.Date2.Reverse().GetEnumerator())
{
while (e1.MoveNext() && e2.MoveNext())
{
var item1 = e1.Current;
var item2 = e2.Current;
item1.theDate
item1.theCount
item2.theCount
}
}
}
答案 1 :(得分:0)
您可以将两个foreach
循环转换为一个for
循环,并为IEnumerables
使用相同的索引。这可能是纠正这个问题的第一步,也是最简单的步骤。
作为第二步,我建议寻找重写此模型的方法。如果这三个数据紧密相关,那么你就有充足的理由创建一个包含所有数据的新对象。
最后,反转IEnumerables
中项目顺序的视图让我觉得有点代码味道。这种最新到最旧的排序,特别是在两个可枚举的对象中完成,也很容易在模型中。
答案 2 :(得分:0)
在模型中,您可以添加另一个包含类Table的列表,该列将包含所有三个值。像下面的东西。
public IEnumerable<Table> TableLst { get; set; }
public class Table
{
public DateTime Date { get; set; }
public int count { get; set; }
public int total { get; set; }
}
由于您有两个列表Date1和Date2,您可以使用LINQ轻松地根据日期加入这些列表并将其传递给控制器。
var data = qv.Date1.Join(qv.Date2, d1 => d1.theDate, d2 => d2.theDate, (d1, d2) => new { d1, d2 });
qv.Table = data.Select(t => new Table
{
Date = t.d1.theDate,
count = t.d1.theCount,
total = t.d2.theCount
});
return View(qv);
您还可以在控制器中的TableLst上执行排序并将其传递给模型。之后只有一个for循环很容易获得数据
@foreach (var item in Model.TableLst)
{
<tr>
<td> @Html.DisplayFor(modelItem => item.Date) </td>
<td> @Html.DisplayFor(modelItem => item.count) </td>
<td> @Html.DisplayFor(modelItem => item.total) </td>
</tr>
}
答案 3 :(得分:0)
使用intermidiate viewModel类对数据进行分组。
e.g。
public class QueryViewModel
{
public DateTime displayDate {get; set;}
public int Count1 {get; set;}
public int count2 {get; set;}
}
public class QueryView
{
public IEnumerable<QueryViewModel> DateList =new IEnumerable<QueryViewModel>();
public IEnumerable<Date1> Date1 { get; set; }
public IEnumerable<Date1> Date2 { get; set; }
public fillDates()
{
QueryViewModel qvm=new QueryViewModel()
int i=0;
foreach(var item in Date1.Reverse())
{
qvm.displayDate = theDate;
qvm.Count1 = theCount;
DateList.Add(qvm);
}
int i=0;
foreach(var item in Date2.Reverse())
{
DateList[i].Count2 = theCount;
i++;
}
return DateList
}
}
在视图中使用fillDates()来呈现列表。