[英]ASP MVC4 - Pass List to view via view model
我有一個模范人物(其中包括出生當天的其他字段),我想將所有人的列表以及每個人的計算年齡傳遞給視圖
為此:
視圖模型
public class vm_PersonList { public Person Person { get; set; } public int age { get; set; } }
控制器動作:
public ActionResult PersonList() { ViewBag.Message = "My List"; var list = new List<vm_PersonList>(); var list_p = new vm_PersonList(); foreach (var p in db.Person) { list_p.Person = p; //the age will be calculated based on p.birthDay, not relevant for the //current question list_p.age = 23; list.Add(list_p); } return View(list); }
風景
@model List<programname.Viewmodels.vm_PersonList> @foreach (var p in Model) { <tr> <td> @p.Person.FullName </td> <td> @p.age </td> </tr> }
Person表包含例如6個條目。 在調試應用程序時,我看到:
在控制器操作結束時,“list”正確包含6個不同的Person條目
在視圖中,“模型”包含6個條目,但是最后一個“數據庫條目”的6倍。 有沒有人有解決這個問題的建議?
您在循環內list_p
使用相同的list_p
實例。 所以你不斷更新其Person屬性。 由於Person
是一個引用類型,因此您在內存中修改相同的引用。 在循環的最后一次迭代中,你顯然用最后一個Person實例替換了這個引用,這解釋了為什么你在視圖中看到同一個人。
嘗試這樣,似乎很容易:
public ActionResult PersonList()
{
ViewBag.Message = "My List";
var model = db.Person.Select(p => new vm_PersonList
{
Person = p,
age = 23
}).ToList();
return View(model);
}
您正在處理相同的vm_PersonList實例。 將vm_PersonList的實例化移動到循環中
foreach (var p in db.Person)
{
var list_p = new vm_PersonList();
list_p.Person = p;
//the age will be calculated based on p.birthDay, not relevant for the
//current question
list_p.age = 23;
list.Add(list_p);
}
這是list_p
實例范圍的問題。 嘗試將控制器代碼更改為:
public ActionResult PersonList()
{
ViewBag.Message = "My List";
var list = db.Person
.Select(p => new vm_PersonList
{
Person = p,
age = 23,
})
.ToList();
return View(list);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.