尝试使用MVC 6和EF代码首次设计显示嵌套列表。我使用这个Tutorial让我开始使用MVC并尝试将其带到另一个层次。
类:
public class Location
{
[Key]
public int ID { get; set; }
public string LocationName { get; set; }
public ICollection<SubLocation> Sublocations { get; set; }
}
}
public class SubLocation
{
public int ID { get; set; }
public string SubLocationName { get; set; }
}
正在运行dnx ef database update
正确设置我的EF数据库并在LocationID
下为SubLocation
分配一个外键。
现在我想在每个位置下显示子位置,如下图所示。用户可以添加与位置关联的新位置或子位置。
显示位置列表很简单:return View(_context.Location.ToList());
要显示嵌套的子位置列表,我应该在控制器或视图中进行工作吗?
我希望我可以像以下一样使用视图,但item.Sublocations
是null
,原因是我不确定,因为数据库中有数据。:
@foreach (var item in Model) {
<tr>
<td>@Html.DisplayFor(modelItem => item.LocationName)</td>
</tr>
@foreach (SubLocation itm in item.Sublocations)
{
<tr>
<td>@itm.SubLocationName</td>
</tr>
}
}
我已尝试在控制器中创建查询,但外键无法与之比较。
var test = (from m in _context.SubLocation
where m.LocationID == curLocID <-- m.LocationID isn't available
select m.SubLocationName
).ToList();
即使我可以使用LocationID,我也不确定如何将当前位置(curLocID)从View发送回控制器。我想我需要一个辅助方法,但我开始进入圈内。
如何维护适当的MVC并显示主类的子类中的嵌套列表?
答案 0 :(得分:1)
您应该考虑在LocationID
类中添加SubLocation
属性,该属性将是Location
表的外键。
public class SubLocation
{
public int ID { get; set; }
public string SubLocationName { get; set; }
public int LocationID { set;get;}
}
现在,查询位置。位置具有SubLocations
属性,因此您的视图应该可以正常工作。
var locations = _context.Locations.Include(s=>s.SubLocations).ToList();
return View(locations);