列表类型属性创建正常,但读取为null

时间:2014-01-13 16:33:40

标签: c# asp.net asp.net-mvc model visual-studio-2013

我有一个模型“Team”,其中包含一个属性“TeamMembers”,它是“TeamMember”类的列表。 “TeamMember”本身现在只有用于测试的Id和Name属性。

我创建了CRUD Views automaticall并且可以输入“Team”(Id,TeamName,Location等)的正常属性,但当然View不知道如何处理List,所以(只是)出于测试目的)我将其硬编码到create方法中:

var TeamMembers = new List<TeamMember>();
TeamMembers.Add(new TeamMembers { Name = "Bob" });
Team.TeamMembers = TeamMembers;

这似乎有效。当我创建新的Team,并在Create方法的末尾设置断点时,我可以在inspector / hover中看到该条目。还有一个表“TeamMember”(我在本地数据库中保存模型)在DB中创建并带有“bob”条目,包括引用我刚刚创建的Team的Team_Id。

现在,当我尝试输出团队的详细信息时,TeamMembers返回“null”。没有错误,没有,只是“null”。它不应该归还吗?什么?一个对象,一个参考,......?

目标是创建一个团队,并让TeamMembers包含一大堆TeamMember条目,我可以稍后迭代并在列表中输出它们等。

有谁可以告诉我我的错误在哪里?是否有一个我没有理解的概念,或者一些愚蠢的疏忽?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

您应该始终在类的构造函数中实例化列表。我不知道你使用什么类型的DB或ORM(实体?)但是框架通常会使用公共空构造函数实例化你的类,然后设置属性。这可能是原因。

这就是为什么每次你在Team的一个实例上工作时,你都确定列表不是空的。

public class Team
{
    public Team()
    {
         TeamMembers = new List<TeamMember>();
    }

    // ...

    public List<TeamMember> TeamMembers { get; set; }
}

然后你只需要这样做:

// TeamMembers is not null anymore
var team = new Team();
team.TeamMembers.Add(new TeamMember { Name = "Bob" });

答案 1 :(得分:0)

您有一个小错字,您要将TeamMembers添加到TeamMembers

它应该如下(我也将TeamMembers变量降低了):

    var teamMembers = new List<TeamMember>();
    teamMembers.Add(new TeamMember { Name = "Bob" });
    Team.TeamMembers = teamMembers;

您还需要确保在行动中退回模型,即

    [HttpGet]
    public ActionResult Index()
    {
       var team = new FooModel();
       var teamMembers = new List<TeamMember>();
       teamMembers.Add(new TeamMember { Name = "Bob" });
       team.TeamMembers = teamMembers;
       return View(team);
    }