Как отобразить список с помощью ViewBag

Привет, мне нужно показать список данных, используя viewbag.but, я не могу этого сделать.
Пожалуйста помогите..
Я пробовал эту вещь:

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

и внутренний вид:

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

Но это не отображает значение и дает ошибку: "Model.Person не содержит defibition для First()"

Ответы

Ответ 1

По вашему мнению, вы должны вернуть его к исходному типу. Без трансляции это просто объект.

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

ViewBag - это динамический тип С# 4. Объекты, возвращенные из него, также являются динамическими, если не выполняются. Тем не менее, методы расширения, такие как .First() и другие Linq, не работают с динамикой.

Изменить - чтобы отправить комментарий:

Если вы хотите отобразить весь список, это так просто:

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

Методы расширения, такие как .First(), не будут работать, но это будет.

Ответ 2

Чтобы собрать все вместе, это должно выглядеть так:

В контроллере:

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

Тогда в представлении:

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

Ответ 3

просто используя данные Viewbag как 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>

Ответ 4

У меня была та же проблема, и я искал и искал.. но не получил никакого результата.
поэтому я поставил свой мозг в драйвере. и я придумал решение ниже. попробуйте это на странице просмотра

в начале страницы добавить этот код

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

чтобы отобразить конкретный атрибут, используйте приведенный ниже код

@Lst.FirstOrDefault().FirstName

в вашем случае используйте код ниже.

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

Надеюсь, что это поможет...

Ответ 5

Просто поставьте

 List<Person>

в ViewBag и в представлении перечислите его в List

Ответ 6

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

Ответ 7

Это то, что я сделал, и это сработало...

С#

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

}