2012-05-09 31 views
14

Hola, necesito mostrar una lista de datos usando viewbag. Pero no puedo hacerlo.
por favor me ayude ..
Probé esta cosa:Cómo mostrar una lista usando ViewBag

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

y dentro de la vista:

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

Pero esto no se presenta el valor y da error diciendo "Model.Person contiene doesnot un defibition de primero()"

Respuesta

40

En su vista, tiene que devolverlo al tipo original. Sin el elenco, es solo un objeto.

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

ViewBag es un tipo dinámico C# 4. Las entidades devueltas son también dinámicas a menos que se emitan. Sin embargo, los métodos de extensión como .First() y todos los demás Linq do not work with dynamics.

Editar - para abordar el comentario:

Si desea mostrar toda la lista, es tan simple como esto:

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

Los métodos de extensión como .First() no va a funcionar, pero esta voluntad.

+0

hey thanx Obtuve el valor, pero ¿puede decirme cómo puedo obtener todos los valores asignados en la lista? – user1274646

1

Sólo hay que poner un

List<Person> 

en la ViewBag y en la Vista devolverlo a la Lista

+0

no he tenido u. ¿Quieres decir que debería mostrar solo ViewBag.data o quieres decir algo más ...? – user1274646

+0

oh eso es malo. publicando desde mi móvil la publicación se envió demasiado temprano y los corchetes fueron eliminados. ver edición para corrección. lo siento. es posible que también necesites utilizar System.Linq en tu View – 360Airwalk

+0

Lo sentimos, eliminamos el comentario ahora. – Leniency

3

Para ponerlo todo junto, esto es lo que debe ser similar:

En el controlador:

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

A continuación, en la vista:

@foreach (var item in ViewBag.Funds) 
{ 
    <span> @item.FundName </span> 
} 
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> 
} 
+0

Agregue algunas explicaciones a su código. – jurgemaister

2

el simple uso Viewbag data como IEnumerable <> list

@{ 
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> 
2

tuve el mismo problema y busco y busco ... pero no obtuve ningún resultado.
así que pongo mi cerebro en el disco. y se me ocurrió la siguiente solución. probar esto en la vista Página

en la cabecera de la página de añadir este código

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

para mostrar el atributo particular, utilice el código de abajo

@Lst.FirstOrDefault().FirstName 

en su caso de uso por debajo de código.

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

Hope this helps ...

0

Esto es lo que hice y funcionó ...

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]; 
.............. 
.............. 

}

Cuestiones relacionadas