2012-05-09 4 views
14

Hallo, ich muss eine Liste von Daten mit viewbag.aber ich kann es nicht tun.
Bitte helfen Sie mir ..
ich dieses Ding versucht:So zeigen Sie eine Liste mit ViewBag an

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

und Innenansicht:

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

Aber dieser Wert nicht angezeigt und gibt Fehlermeldung, dass „Model.Person doesnot enthalten „a defibition für First()

Antwort

40

In Ihrer Sicht müssen Sie es auf den ursprünglichen Typ zurückwerfen. Ohne die Besetzung ist es nur ein Objekt.

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

ViewBag ist ein C# 4 dynamischer Typ. Entitäten, die von ihm zurückgegeben werden, sind auch dynamisch, es sei denn, sie werden umgewandelt. Allerdings, Erweiterungsmethoden wie. First() und alle anderen Linq one do not work with dynamics.

Bearbeiten - Kommentar zur Adresse:

Wenn Sie die gesamte Liste angezeigt werden sollen, ist es so einfach wie diese:

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

Erweiterungsmethoden wie .First() wird nicht funktionieren, aber dieser Wille.

+0

hey danke ich habe den Wert aber kannst du mir sagen, wie kann ich alle Werte in der Liste abrufen? – user1274646

1

Nur ein

List<Person> 
setzen

in den ViewBag und in die Ansicht zurück in die Liste werfen

+0

ich nicht u bekommen haben. du meinst, ich sollte nur ViewBag.data anzeigen oder du meinst etwas anderes .. ?? – user1274646

+0

oh das ist gemein. Post von meinem Handy wurde die Post zu früh gesendet und die Klammern entfernt. Siehe Bearbeiten zur Korrektur. Es tut uns leid. Möglicherweise müssen Sie auch System.Linq in Ihrer Ansicht verwenden – 360Airwalk

+0

Entschuldigung, jetzt Kommentar gelöscht. – Leniency

3

Um es alle zusammen, das ist, wie es aussehen soll:

In der Steuerung:

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

Dann in der Ansicht:

@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

Bitte fügen Sie Ihrem Code eine Erläuterung hinzu. – jurgemaister

2

einfach mit Viewbag Daten als IEnumerable <> Liste

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

Ich hatte das gleiche Problem und ich suche und suche .. aber habe kein Ergebnis.
Also habe ich mein Gehirn in den Antrieb gesetzt. und ich habe die folgende Lösung gefunden. verwenden Sie den Code unten

@Lst.FirstOrDefault().FirstName 

in Ihrem Fall bei Temperaturen unter Code versuchen, dies in der Ansicht Seite

am Kopf der Seite fügen Sie diesen Code

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

das bestimmte Attribut angezeigt werden soll.

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

Hoffen, das hilft ...

0

Dies ist, was ich tat, und es funktionierte ...

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

}

Verwandte Themen