web-dev-qa-db-ja.com

ViewBagを使用してリストを表示する方法

こんにちは、私はviewbagを使用してデータのリストを表示する必要がありますが、それを行うことはできません。
私を助けてください..
このことを試しました:

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

および内部ビュー:

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

しかし、これは値を表示せず、「Model.PersonにはFirst()の定義が含まれていません」というエラーが表示されます

23
user1274646

ビューでは、元のタイプにキャストする必要があります。キャストがなければ、それは単なるオブジェクトです。

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

ViewBagはC#4ダイナミックタイプです。それから返されるエンティティも、キャストしない限り動的です。ただし、.First()や他のすべてのLinqのような拡張メソッド ダイナミクスでは動作しません

編集-コメントに対処するには:

リスト全体を表示する場合は、次のように簡単です。

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

.First()などの拡張メソッドは機能しませんが、これは機能します。

55
Leniency

すべてをまとめると、次のようになります。

コントローラー内:

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

次に、ビューで:

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

iEnumerable <>リストとしてViewbagデータを使用するだけ

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

私は同じ問題を抱えていて、検索と検索を行いましたが、結果はありませんでした。
だから私は脳をオーバードライブ状態にした。そして、私は以下の解決策を思いつきました。ビューページでこれを試してください

ページの先頭にこのコードを追加します

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

特定の属性を表示するには、以下のコードを使用します

@Lst.FirstOrDefault().FirstName

あなたの場合、以下のコードを使用してください。

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

お役に立てれば...

3
Ad Kahn

置くだけ

 List<Person>

viewBagに入れ、Viewでリストにキャストします

1
360Airwalk

これは私がやったことであり、それは働いた...

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

}

1
Sahan Pathirana
     //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
user2389005