我在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;
答案 0 :(得分:2)
as
keyword会尽可能将值转换为给定类型,否则将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
,这将导致“对象未设置为对象的引用“异常。
请记住,集合(Collection<T>
)例如不从列表继承。另一方面,您处理实现IEnumerable<T>
的大多数集合。除非您使用List<T>
的特定功能,否则请使用IEnumerable<T>
。尽可能宽容。
答案 1 :(得分:1)
ViewBag
是动态的,并将对象存储为...... object
。在使用之前,您需要将列表转换为其原始类型。
<table>
@foreach (var item in ViewBag.allteacherlist
as List <TEAMS_PP.Data.TeacherEval>)
{
<tr><td> @item.AllTechersList() </td> </tr>
}
</table>
正如@MainMa在回答中指出的那样,您需要在演员表中指定正确的类型,否则在使用null
关键字时您将获得as
。在您的控制器中,您创建了一个List<TEAMS_PP.Entity.account>
类型的对象,但在您的视图中,您试图获取类型为TEAMS_PP.Data.TeacherEval
的对象。 as
投射结果为null
。