ViewBag 无法在 View 上正确显示数据
本文关键字:显示 数据 View ViewBag | 更新日期: 2023-09-27 18:36:51
我的控制器中有一个 ViewBag 女巫包含一个 Linq 项目列表,我在视图中创建了一个 Foreach 循环以基于 Viwbag 中的数据创建一个表,但我得到循环中每个项目的"System.Web.Mvc.SelectListItem"
控制器视袋代码:
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;
和米 查看表 :
<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>
首先,正如@juunas所说,SelectList
用于创建下拉菜单,如果要将数据输出到表中,可能不是您想要使用的。 只需将IEnumerable或列表发送到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>
一般建议,先尝试投射ViewBag.GroupPops as SelectList
。它将帮助您在编译时了解您正在使用的对象type
。话虽如此,我完全同意@Jaquez,在这种情况下使用List<T>
。