在foreach循环中显示viewbag中列表中的项目

本文关键字:列表 项目 viewbag 显示 foreach 循环 | 更新日期: 2023-09-27 18:05:34

我在ViewBag中列出了ViewBag.allteacherlist。我想展示它在foreach循环中的元素。我做了如下的事情:

<table>
        @foreach (var item in ViewBag.allteacherlist
            as List <TEAMS_PP.Data.TeacherEval>)
            {         
           <tr><td>    @item.AllTechersList() </td> </tr>
            }
</table>

这给了我错误object not set to referance of an object。列表在ViewBag.allteacherlist

我做错了什么?

viewbag代码:

List<TEAMS_PP.Entity.account> list = new TeacherEval().AllTechersList();
            ViewBag.allteacherlist = list;

在foreach循环中显示viewbag中列表中的项目

as关键字在可能的情况下将值转换为给定的类型,否则将值转换为null。声明:

var result = originalValue as SpecificType;

类似于:

var result = originalValue is SpecificType ? (SpecificType)originalValue : null;

如果ViewBag.allteacherlist不是List<TEAMS_PP.Data.TeacherEval>类型或者继承了List<TEAMS_PP.Data.TeacherEval>类型,你将得到一个null,这将导致"Object not set to a Object reference "异常。

请记住,集合(Collection<T>),例如,不继承列表。另一方面,您处理的大多数集合都实现了IEnumerable<T>。除非您使用List<T>的特定功能,否则请使用IEnumerable<T>

ViewBag是动态的,并存储对象,以及…object年代。在使用列表之前,需要将列表强制转换为其原始类型。

<table>
    @foreach (var item in ViewBag.allteacherlist
        as List <TEAMS_PP.Data.TeacherEval>)
        {         
            <tr><td>    @item.AllTechersList() </td> </tr>
        }
</table>

正如@MainMa在他的回答中指出的那样,您需要在转换中指定正确的类型,否则在使用as关键字时将得到null。在控制器中,您正在创建类型为List<TEAMS_PP.Entity.account>的对象,但在视图中,您试图获得类型为TEAMS_PP.Data.TeacherEval的对象。as强制转换结果为null