30

こんにちは、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() の定義が含まれていません」というエラーが表示されます。

4

9 に答える 9

63

あなたの見解では、元の型にキャストし直す必要があります。キャストがなければ、それは単なるオブジェクトです。

<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() のような拡張メソッドは機能しませんが、これは機能します。

于 2012-05-09T18:46:32.027 に答える
1

置くだけ

 List<Person>

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

于 2012-05-09T18:45:03.960 に答える