在单个视图中显示所有父项的所有子项

时间:2012-02-22 02:31:08

标签: asp.net-mvc-3

我目前正在使用视图模型在索引视图中显示父母(艺术家)列表,其中包括一个重定向到Index / 5以显示子项列表(Albums)的ActionLink,同时仍显示完整列表父母。

我现在正在尝试更新这个,以便在路由到Index时,将为每个父级加载所有子级,我想这包括使用嵌套的@foreach。

它似乎应该很简单,我试图让这个例子尽可能简单(避免部分视图等),但我无法在任何地方找到比较教程或回答问题 - (这可能好吧,我正在寻找错误的条款!)。

对于我是否以正确的方式进行此任何帮助都将非常感激。

控制器

    // GET: /ArtistsTest/

    public ActionResult Index(Int32? id)
    {
        var viewModel = new TestViewModel();
        viewModel.Artists = db.Artists
            .Include(a => a.Albums);

        if (id != null)
        {
            ViewBag.ArtistID = id.Value;
            viewModel.Albums = viewModel.Artists.Where(a => a.ArtistID == id.Value).Single().Albums;
        }

        return View(viewModel);
    }

观点:

@foreach (var artist in Model.Artists)
{
    <p>
        @Html.DisplayFor(modelItem => artist.ArtistID)
        @Html.DisplayFor(modelItem => artist.ArtistName)
        @Html.ActionLink("Select", "Index", new { id = artist.ArtistID })
    </p>
}
<br />
@if (Model.Albums != null)
{
    <p>
        Albums:
        @foreach (var album in Model.Albums)
        {
            <p>
                @Html.DisplayFor(albumItem => album.AlbumName)
            </p>  
        }
    </p>
}

1 个答案:

答案 0 :(得分:0)

查看:

@foreach (var artist in Model.Artists)
{
    <p>
        @Html.DisplayFor(modelItem => artist.ArtistID)
        @Html.DisplayFor(modelItem => artist.ArtistName)
        @Html.ActionLink("Select", "Index", new { id = artist.ArtistID })

        @foreach(var album in artist.Albums){
            <p>
                @Html.DisplayFor(albumItem => album.AlbumName)
            </p>  
        }
    </p>
}

控制器:

public ActionResult Index()
{
    var viewModel = new TestViewModel();
    viewModel.Artists = db.Artists.Include(a => a.Albums);

    return View(viewModel);
}