在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;
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