我有一个模型人物(其中包括出生日期等字段)
我想将所有人的列表以及每个人的计算年龄传递给视图
因此:
-
视图模型
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);
}
-
The view
@model List<programname.Viewmodels.vm_PersonList>
@foreach (var p in Model)
{
<tr>
<td>
@p.Person.FullName
</td>
<td>
@p.age
</td>
</tr>
}
Person 表包含例如 6 个条目。
调试应用程序时我看到:
在控制器操作“列表”末尾正确包含 6 个不同的人员条目
在视图中,“模型”包含 6 个条目,但是最后一个“数据库条目”的 6 倍。
有人有解决这个问题的建议吗?
你正在使用相同的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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)