ViewBag 无法在 View 上正确显示数据
ViewBag not displaying data correctly on View
我的控制器中有一个 ViewBag 包含一个 Linq 项目列表,我在我的视图中创建了一个 Foreach 循环以根据 Viwbag 中的数据创建一个 table 但我得到"System.Web.Mvc.SelectListItem" 我循环中的每个项目
控制器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 View Table :
<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
用于创建下拉菜单,如果您要将数据输出到 table.只需将 IEnumerable 或列表发送到 ViewBag。
其次,您在 th
元素中显示 @item,而您可能打算将其显示在 td
元素中。
至于其余部分,Razor 视图无法创建显示项目属性所需的所有 td
元素。因此,当您引用对象时,您只是获得了对象类型。您将需要显式添加它们并调用属性本身以使它们以您想要的方式显示在 table 中。
<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>
。
我的控制器中有一个 ViewBag 包含一个 Linq 项目列表,我在我的视图中创建了一个 Foreach 循环以根据 Viwbag 中的数据创建一个 table 但我得到"System.Web.Mvc.SelectListItem" 我循环中的每个项目
控制器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 View Table :
<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
用于创建下拉菜单,如果您要将数据输出到 table.只需将 IEnumerable 或列表发送到 ViewBag。
其次,您在 th
元素中显示 @item,而您可能打算将其显示在 td
元素中。
至于其余部分,Razor 视图无法创建显示项目属性所需的所有 td
元素。因此,当您引用对象时,您只是获得了对象类型。您将需要显式添加它们并调用属性本身以使它们以您想要的方式显示在 table 中。
<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>
。