How to display a list using ViewBag
Asked Answered
H

9

32

Hi i need to show a list of data using viewbag.but i am not able to do it.
Please Help me..
I tried this thing:

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

and inside view:

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

But this does not show up the value and gives error saying "Model.Person doesnot contain a defibition for First()"

Hertha answered 9/5, 2012 at 18:18 Comment(0)
P
67

In your view, you have to cast it back to the original type. Without the cast, it's just an object.

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

ViewBag is a C# 4 dynamic type. Entities returned from it are also dynamic unless cast. However, extension methods like .First() and all the other Linq ones do not work with dynamics.

Edit - to address the comment:

If you want to display the whole list, it's as simple as this:

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

Extension methods like .First() won't work, but this will.

Prairie answered 9/5, 2012 at 18:46 Comment(1)
hey thanx i got the value but can u tell me how can i fetch all the values assigned in the list?Hertha
V
11

To put it all together, this is what it should look like:

In the controller:

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

Then in the view:

@foreach (var item in ViewBag.Funds)
{
    <span> @item.FundName </span>
}
Vastah answered 3/12, 2014 at 0:31 Comment(2)
Great Chris. I liked your approach, but that is not what I am looking for. Even then, one up-vote for you for your nice approach.Calculus
Simple and neat , I like thisSmith
C
6

simply using Viewbag data as 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>
Centring answered 13/7, 2016 at 13:49 Comment(0)
S
3

i had the same problem and i search and search .. but got no result.
so i put my brain in over drive. and i came up with the below solution. try this in the View Page

at the head of the page add this code

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

to display the particular attribute use the below code

@Lst.FirstOrDefault().FirstName

in your case use below code.

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

Hope this helps...

Sutherlan answered 17/11, 2016 at 13:50 Comment(0)
H
2

Use as variable to cast the Viewbag data to your desired class in view.

@{

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. 
}

In view write this

<td>
    @(personlist.FirstOrDefault().Name)
</td>
Houselights answered 1/5, 2020 at 19:41 Comment(0)
H
1

Just put a

 List<Person>

into the ViewBag and in the View cast it back to List

Homogeny answered 9/5, 2012 at 18:45 Comment(2)
i didn't get u. u mean to say i should display only ViewBag.data or u mean something else..??Hertha
oh that's mean. posting from my mobile the post was sent too early and the brackets stripped away. see edit for correction. sorry. you might alos need to use System.Linq in your ViewHomogeny
L
1

This is what i did and It worked...

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

}

Loring answered 27/10, 2017 at 9:31 Comment(0)
A
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>
}
Allow answered 19/12, 2014 at 7:19 Comment(0)
S
0

I had the problem that I wanted to use my ViewBag to send a list of elements through a RenderPartial as the object, and to this you have to do the cast first, I had to cast the ViewBag in the controller and in the View too.

In the Controller:

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

In the View:

List<CLIENTES_VIP_DB.VISITAS.VISITA> VisitaList = (List<CLIENTES_VIP_DB.VISITAS.VISITA>)ViewBag.visitList ;
Secateurs answered 8/3, 2020 at 7:9 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.