こんにちは、私は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()の定義が含まれていません」というエラーが表示されます
ビューでは、元のタイプにキャストする必要があります。キャストがなければ、それは単なるオブジェクトです。
<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()などの拡張メソッドは機能しませんが、これは機能します。
すべてをまとめると、次のようになります。
コントローラー内:
List<Fund> fundList = db.Funds.ToList();
ViewBag.Funds = fundList;
次に、ビューで:
@foreach (var item in ViewBag.Funds)
{
<span> @item.FundName </span>
}
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>
私は同じ問題を抱えていて、検索と検索を行いましたが、結果はありませんでした。
だから私は脳をオーバードライブ状態にした。そして、私は以下の解決策を思いつきました。ビューページでこれを試してください
ページの先頭にこのコードを追加します
@{
var Lst = ViewBag.data as IEnumerable<MyProject.Models.Person>;
}
特定の属性を表示するには、以下のコードを使用します
@Lst.FirstOrDefault().FirstName
あなたの場合、以下のコードを使用してください。
<td>@Lst.FirstOrDefault().FirstName </td>
お役に立てれば...
置くだけ
List<Person>
viewBagに入れ、Viewでリストにキャストします
これは私がやったことであり、それは働いた...
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];
..............
..............
}
//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>
}