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

时间:2014-05-28 07:25:13

标签: c# asp.net asp.net-mvc-4

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

2 个答案:

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