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>

ViewBag 无法在 View 上正确显示数据

首先,正如@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>