我有一个模型人(出生日期等字段) 我想将所有人的列表以及每个人的计算年龄传递给 View
因此:
View 模型
public class vm_PersonList { public Person Person { get; set; } public int age { get; set; } }
Controller Action :
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 个条目。 在调试应用程序时,我看到:
在 Controller Action 的末尾,“列表”正确地包含了 6 个不同的 Person 条目
在 View 中,“模型”包含 6 个条目,但是是最后一个“数据库条目”的 6 倍。 有没有人有解决这个问题的建议?
最佳答案
您在循环中一遍又一遍地使用相同的 list_p
实例。所以你不断地更新它的 Person 属性。由于 Person
是引用类型,因此您正在修改内存中的相同引用。在循环的最后一次迭代中,您显然将此引用替换为 Person 的最后一个实例,这解释了为什么您在 View 中看到的是同一个人。
像这样尝试,看起来容易多了:
public ActionResult PersonList()
{
ViewBag.Message = "My List";
var model = db.Person.Select(p => new vm_PersonList
{
Person = p,
age = 23
}).ToList();
return View(model);
}
关于c# - ASP MVC4 - 传递列表以通过 View 模型查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10750718/