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 ()"
À 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.
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>
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>
}
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...
Il suffit de mettre un
List<Person>
dans le ViewBag et dans la vue, remettez-le à la liste
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];
..............
..............
}
//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>
}