如何使用ViewBag显示列表

use*_*646 24 model-view-controller asp.net-mvc viewbag asp.net-mvc-3

嗨,我需要使用viewbag显示数据列表.但我无法做到这一点.
请帮帮我..
我试过这件事:

 ICollection<Learner> list = new HobbyHomeService().FetchLearner();
 ICollection<Person> personlist = new HobbyHomeService().FetchPerson(list);
 ViewBag.data = personlist;
Run Code Online (Sandbox Code Playgroud)

和内部视图:

 <td>@ViewBag.data.First().FirstName</td>
Run Code Online (Sandbox Code Playgroud)

但这并没有显示该值,并给出错误说"Model.Person不包含First()的解除"

Len*_*ncy 57

在您的视图中,您必须将其强制转换为原始类型.没有演员表,它只是一个对象.

<td>@((ViewBag.data as ICollection<Person>).First().FirstName)</td>
Run Code Online (Sandbox Code Playgroud)

ViewBag是C#4动态类型.除非投射,否则从中返回的实体也是动态的.但是,像.First()和所有其他Linq那样的扩展方法不适用于动态.

编辑 - 解决评论:

如果要显示整个列表,它就像这样简单:

<ul>
    @foreach (var person in ViewBag.data)
    {
        <li>@person.FirstName</li>
    }
</ul>
Run Code Online (Sandbox Code Playgroud)

像.First()这样的扩展方法不起作用,但是会这样.


小智 5

综上所述,它应该是这样的:

在控制器中:

List<Fund> fundList = db.Funds.ToList();
ViewBag.Funds = fundList;
Run Code Online (Sandbox Code Playgroud)

然后在视图中:

@foreach (var item in ViewBag.Funds)
{
    <span> @item.FundName </span>
}
Run Code Online (Sandbox Code Playgroud)


Pan*_*nkl 5

只需将Viewbag数据用作IEnumerable <>列表

@{
 var getlist= ViewBag.Listdata as IEnumerable<myproject.models.listmodel>;

  foreach (var item in getlist){   //using foreach
<span>item .name</span>
}

}

//---------or just write name inside the getlist
<span>getlist[0].name</span>
Run Code Online (Sandbox Code Playgroud)