use*_*778 4 c# asp.net asp.net-mvc razor asp.net-mvc-4
我有一个模范人物(其中包括出生当天的其他字段),我想将所有人的列表以及每个人的计算年龄传递给视图
为此:
视图模型
public class vm_PersonList
{
public Person Person { get; set; }
public int age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)控制器动作:
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);
}
Run Code Online (Sandbox Code Playgroud)风景
@model List<programname.Viewmodels.vm_PersonList>
@foreach (var p in Model)
{
<tr>
<td>
@p.Person.FullName
</td>
<td>
@p.age
</td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)Person表包含例如6个条目.在调试应用程序时,我看到:
在控制器操作结束时,"list"正确包含6个不同的Person条目
在视图中,"模型"包含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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31126 次 |
| 最近记录: |