给出一个包含以下内容的目录:
分类, 节, 主题,
我创建了以下3个模型:
public class Category
{
public int id { get; set; }
public string name { get; set; }
public ICollection<Section> Sections { get; set; }
}
public class Section
{
public int id { get; set; }
public string name { get; set; }
public int CategoryId { get; set; }
public ICollection<Topic> Topics { get; set; }
}
public class Topic
{
public int id { get; set; }
public string name { get; set; }
public int SectionId { get; set; }
}
在SQL Mgmt Studio中,我创建了3个表之间的一对多关系。我的Controller ActionResult看起来像这样:
public ActionResult Index()
{
return View(_db.Categories.ToList());
}
然后我的观点:
@model IEnumerable<Models.Category>
<h2>Table of Contents</h2>
<ul>
@foreach (var item in Model)
{
<li>@Html.DisplayFor(model => item.name)
@if (item.Sections != null)
{
<ul>
@foreach (var sec in item.Sections)
{
<li>@Html.DisplayFor(model => sec.name)
@if (sec.Topics != null)
{
<ul>
@foreach (var topic in sec.Topics)
{
<li>@Html.DisplayFor(model => topic.name)</li>
}
</ul>
}
</li>
}
</ul>
}
</li>
}
</ul>
我只从Category表中获取数据。因此,它正确地抓取类别数据并构建外部列表,但它没有填充模型中的相关章节和主题。我做错了什么?
根据David Clough的建议,在下面的评论中尝试实施答案。在我的Controller中引用System.Data.Entity之后,lambda表达式版本能够编译并运行,但它在尝试访问模型的foreach循环中产生错误。 InnerException中的错误是:“无效的列名'Section_id'。\ r \ n无效的列名'Category_id'。\ r \ n无效的列名'Section_id'。”
以下是我对Controller所做的更改:
public ActionResult Index()
{
var TOC = _db.Categories.Include(c => c.Sections.Select(s => s.Topics));
return View(TOC);
}
答案 0 :(得分:0)
我没有弄清楚如何使用嵌套模型。相反,我使用部分视图,似乎工作正常