我的控制器中有一个包含Linq项目列表的ViewBag,我在视图中创建了一个Foreach循环,根据Viwbag中的数据创建了一个表,但我得到了“System.Web.Mvc.SelectListItem”我的循环中的每个项目
Controller Viewbag代码:
foreach (var item in db.Pos.GroupBy(a => a.Pla).Select(p => new
{
Pla = p.Key,
Pdv = p.Select(a => a.Pdv).FirstOrDefault(),
Nombre = p.Select(a => a.Descripcion).FirstOrDefault(),
Rid = p.Select(a => a.Rid).FirstOrDefault(),
Quantity = p.Sum(q => q.Cantidad),
Total = p.Sum(x => x.Total),
Fecha = p.Select(a => a.Fecha).FirstOrDefault()
}))
{
listapop.Add(item.Pdv);
listapop.Add(item.Pla);
listapop.Add(item.Nombre);
listapop.Add(item.Rid);
listapop.Add(item.Quantity.ToString());
listapop.Add(item.Total.ToString());
listapop.Add(item.Fecha.ToString());
}
var grupopopularidad = new SelectList(listapop.ToList());
ViewBag.GroupPops = grupopopularidad;
和mi查看表:
<table>
<thead>
<tr>
<th>Punto de Venta</th>
<th>Platillo</th>
<th>Nombre</th>
<th>Turno</th>
<th>Cantidad</th>
<th>Ingresos</th>
<th>Fecha</th>
</tr>
</thead>
<tbody>
@foreach (var item in ViewBag.GroupPops)
{
<tr>
<th>@item</th>
</tr>
}
</tbody>
</table>
答案 0 :(得分:1)
首先,正如@juunas所说,SelectList
用于创建下拉菜单,如果要将数据输出到表中,可能不是您想要使用的。只需将IEnumerable或List发送到ViewBag即可。
其次,您在th
元素中显示@item,而您可能认为它位于td
元素中。
至于其余部分,Razor视图无法创建显示商品属性所需的所有td
元素。因此,您只是在引用对象时获取对象类型。您需要显式添加它们以及调用属性本身,以使它们以您希望的方式显示在表中。
<table>
<thead>
<tr>
<th>Punto de Venta</th>
<th>Platillo</th>
<th>Nombre</th>
<th>Turno</th>
<th>Cantidad</th>
<th>Ingresos</th>
<th>Fecha</th>
</tr>
</thead>
<tbody>
@foreach (var item in ViewBag.GroupPops)
{
<tr>
<td>@item.Pdv</td>
<td>@item.Pla</td>
<td>@item.Nombre</td>
<td>@item.Rid</td>
<td>@item.Quantity.ToString()</td>
<td>@item.Total.ToString()</td>
<td>@item.Fecha.ToString()</td>
</tr>
}
</tbody>
</table>
答案 1 :(得分:1)
一般建议,首先尝试转换ViewBag.GroupPops as SelectList
。它将帮助您在编译时了解您正在使用的type
对象。话虽如此,我完全赞同@Jaquez,在这种情况下使用List<T>
。