构建目录MVC嵌套模型

时间:2017-01-16 17:59:00

标签: asp.net-mvc

给出一个包含以下内容的目录:

分类, 节, 主题,

我创建了以下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);
}

1 个答案:

答案 0 :(得分:0)

我没有弄清楚如何使用嵌套模型。相反,我使用部分视图,似乎工作正常