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

时间:2016-03-01 17:14:31

标签: c# asp.net-mvc razor viewbag

我的控制器中有一个包含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>

2 个答案:

答案 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>