c# - ASP MVC4 - 传递列表以通过 View 模型查看

标签 c# asp.net asp.net-mvc razor asp.net-mvc-4

我有一个模型人(出生日期等字段) 我想将所有人的列表以及每个人的计算年龄传递给 View

因此:

  1. View 模型

    public class vm_PersonList
    {
        public Person Person { get; set; } 
        public int age { get; set; }
    }
    
  2. 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);
    }
    
  3. 风景

    @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/

相关文章:

javascript - asp.net MVC 与 MVVM 通过 Knockout,将模型传递给 javascript

javascript - dropdownlistfor 无法使用 jquery 从 Controller 更改为选定值

c# - 在具有一对多关系的实体中同时插入数据

c# - 使用 DrawString 将单个字符居中

c# - 通过 Cloudflare 和 Azure 获取用户的 IP 地址

c# - 以编程方式启动 ASP.NET Core Web-API

c# - 如何更新此类/方法以改进代码指标

c# - 错误找不到类型或命名空间名称 'AxWMPLib'(是否缺少 using 指令或程序集引用?)

c# - 正则表达式问题

asp.net - 如何分析 ADO.NET 连接池?