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

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

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

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

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

но это не показывает значение и дает ошибку, говоря " модель.Person не содержит дефибиции для First ()"

7 ответов


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

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

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

Edit-для обращения к комментарию:

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

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

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


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

поставить все это вместе, вот как это должно выглядеть:

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

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

затем в вид:

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

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

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

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

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

@Lst.FirstOrDefault().FirstName

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

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

надеюсь, что это помогает...


просто поставить

 List<Person>

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


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

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

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

}