我有一个模型“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条目,我可以稍后迭代并在列表中输出它们等。
有谁可以告诉我我的错误在哪里?是否有一个我没有理解的概念,或者一些愚蠢的疏忽?
感谢您的时间。
答案 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);
}