web-dev-qa-db-fra.com

Comment afficher une liste en utilisant ViewBag

Bonjour, j'ai besoin d'afficher une liste de données à l'aide de viewbag. Mais je ne suis pas en mesure de le faire.
Aidez-moi, s'il vous plaît..
J'ai essayé cette chose:

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

et vue intérieure:

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

Mais cela ne montre pas la valeur et donne une erreur disant "Model.Person ne contient pas de défibition pour First ()"

19
user1274646

À votre avis, vous devez rétablir le type d'origine. Sans la distribution, c'est juste un objet.

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

ViewBag est un type dynamique C # 4. Les entités qui en sont renvoyées sont également dynamiques, à moins d'être transtypées. Cependant, les méthodes d'extension comme .First () et toutes les autres méthodes de Linq ne fonctionnent pas avec la dynamique .

Edit - pour adresser le commentaire:

Si vous voulez afficher toute la liste, c'est aussi simple que cela:

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

Les méthodes d'extension comme .First () ne fonctionneront pas, mais cela fonctionnera.

48
Leniency

en utilisant simplement les données Viewbag comme liste 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>
5
pandian_Snkl

Pour résumer, voici à quoi cela devrait ressembler:

Dans le contrôleur:

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

Puis dans la vue:

@foreach (var item in ViewBag.Funds)
{
    <span> @item.FundName </span>
}
4
Chris

j'ai eu le même problème et je recherche et recherche .. mais aucun résultat. 
alors j'ai mis mon cerveau dans le lecteur. et je suis venu avec la solution ci-dessous . essayez ceci dans la page Voir

en haut de la page ajoutez ce code

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

pour afficher l'attribut particulier, utilisez le code ci-dessous

@Lst.FirstOrDefault().FirstName

dans votre cas, utilisez le code ci-dessous.

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

J'espère que cela t'aides... 

3
Ad Kahn

Il suffit de mettre un 

 List<Person>

dans le ViewBag et dans la vue, remettez-le à la liste

1
360Airwalk

C'est ce que j'ai fait et ça a marché ... 

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

}

1
Sahan Pathirana
     //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
user2389005