从多对多关系的另一方获取属性 ASP.NET Core 6 MVC

问题描述 投票:0回答:1

MoviesController
Details
方法中,我想显示电影所属的集合。我想我可以把它放在
ViewData
中以显示在页面上。我将
MovieCollections
Collections
添加到
Movie
对象中,我可以在调试器中看到该集合,但智能感知不允许我将其放入
ViewData
中。

换句话说,它不会让我这样做...

ViewData["Collection"] = movie.MovieCollections.Collection.Name;

enter image description here

这是 LINQ

movie = await _context.Movie
    .Include(m => m.Cast)
    .Include(m => m.Crew)
    .Include(m => m.MovieCollections)
        .ThenInclude(m => m.Collection)
    .FirstOrDefaultAsync(m => m.MovieId == id); 

具有相关属性的模型:

public class Movie
{
    public int Id { get; set; }

    //The movieID from TMDB. 
    public int MovieId { get; set; }
    public ICollection<MovieCollection> MovieCollections { get; set; } = new HashSet<MovieCollection>();
}

public class MovieCollection
{
    public int Id { get; set; }
    public int CollectionId { get; set; }
    public int MovieId { get; set; }

    public virtual Collection Collection { get; set; }
    public virtual Movie Movie { get; set; }
}

public class Collection
{
     public int Id { get; set; }
     public string Name { get; set; }
     public string Description { get; set; }

     public ICollection<MovieCollection> MovieCollections { get; set; } = new HashSet<MovieCollection>();
} 

感谢您提前提供帮助

asp.net-core-mvc
1个回答
0
投票

MovieCollections
ICollection
的类型,您需要阅读
ICollection
中的属性,如下所示:

ViewData["CollectionNames"] = movie.MovieCollections.Select(mc => mc.Collection.Name).ToList();

然后您可以显示如下名称:

@if (ViewData["CollectionNames"] is List<string> collectionNames && collectionNames.Any())
{
    <ul>
        @foreach (var name in collectionNames)
        {
            <li>@name</li>
        }
    </ul>
}
else
{
    <span>No collections</span>
}
© www.soinside.com 2019 - 2024. All rights reserved.