30

嗨,我需要使用 viewbag 显示数据列表。但我无法做到。
请帮助我..
我试过这个东西:

 ICollection<Learner> list = new HobbyHomeService().FetchLearner();
 ICollection<Person> personlist = new HobbyHomeService().FetchPerson(list);
 ViewBag.data = personlist;

和内部视图:

 <td>@ViewBag.data.First().FirstName</td>

但这不会显示值并给出错误消息“Model.Person 不包含 First() 的定义”

4

9 回答 9

63

在您看来,您必须将其转换回原始类型。没有演员表,它只是一个对象。

<td>@((ViewBag.data as ICollection<Person>).First().FirstName)</td>

ViewBag 是 C# 4 动态类型。除非强制转换,否则从它返回的实体也是动态的。但是,像 .First() 和所有其他 Linq 这样的扩展方法不适用于 dynamics

编辑 - 解决评论:

如果要显示整个列表,就这么简单:

<ul>
    @foreach (var person in ViewBag.data)
    {
        <li>@person.FirstName</li>
    }
</ul>

.First() 之类的扩展方法不起作用,但这会起作用。

于 2012-05-09T18:46:32.027 回答
9

总而言之,它应该是这样的:

在控制器中:

List<Fund> fundList = db.Funds.ToList();
ViewBag.Funds = fundList;

然后在视图中:

@foreach (var item in ViewBag.Funds)
{
    <span> @item.FundName </span>
}
于 2014-12-03T00:31:50.673 回答
6

只需将 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>
于 2016-07-13T13:49:28.700 回答
3

我有同样的问题,我搜索和搜索..但没有结果。
所以我把我的大脑放在超速驾驶中。我想出了以下解决方案。在查看页面中试试这个

在页面顶部添加此代码

 @{
      var Lst = ViewBag.data as IEnumerable<MyProject.Models.Person>;
    }

要显示特定属性,请使用以下代码

@Lst.FirstOrDefault().FirstName

在你的情况下使用下面的代码。

<td>@Lst.FirstOrDefault().FirstName </td>  

希望这可以帮助...

于 2016-11-17T13:50:48.127 回答
2

用作变量将Viewbag数据转换为视图中所需的类。

@{

IEnumerable<WebApplication1.Models.Person> personlist = ViewBag.data as
IEnumerable<WebApplication1.Models.Person>;
// You may need to write WebApplication.Models.Person where WebApplication.Models is
  the namespace name where the Person class is defined. It is required so that view 
  can know about the class Person. 
}

鉴于写这个

<td>
    @(personlist.FirstOrDefault().Name)
</td>
于 2020-05-01T19:41:56.243 回答
1

放一个

 List<Person>

进入 ViewBag 并在 View 中将其转换回 List

于 2012-05-09T18:45:03.960 回答
1

这就是我所做的,它奏效了......

C#

ViewBag.DisplaylList = listData; 

javascript

var dispalyList= @Html.Raw(Json.Encode(this.ViewBag.DisplaylList));
for(var i=0;i<dispalyList.length; i++){

 var row = dispalyList[i];
 ..............
 ..............

}

于 2017-10-27T09:31:38.230 回答
0
     //controller  You can use this way

    public ActionResult Index()
    {
      List<Fund> fundList = db.Funds.ToList();
     ViewBag.Funds = fundList;
        return View();
    }




<--View ; You can use this way html-->

@foreach (var item in (List<Fund>)ViewBag.Funds)
{
    <p>@item.firtname</p>
}
于 2014-12-19T07:19:49.683 回答
0

我有一个问题,我想使用我的 ViewBag 通过 RenderPartial 作为对象发送元素列表,为此你必须先进行转换,我必须在控制器和视图中转换 ViewBag。

在控制器中:

ViewBag.visitList = (List<CLIENTES_VIP_DB.VISITAS.VISITA>)                                                                 
visitaRepo.ObtenerLista().Where(m => m.Id_Contacto == id).ToList()

在视图中:

List<CLIENTES_VIP_DB.VISITAS.VISITA> VisitaList = (List<CLIENTES_VIP_DB.VISITAS.VISITA>)ViewBag.visitList ;
于 2020-03-08T07:09:20.110 回答