ASP.NET MVC Core,无法在主详细信息视图中查看列表

时间:2018-03-14 10:40:47

标签: asp.net asp.net-mvc master-detail

(第一次!)使用ASP.NET CORE 2.0 MVC。 EF Db首先。

我在这里和网上搜索了大量的主题,似乎找不到我认为简单的主人/细节的答案'查看问题。

我有一个视图(没有输入条目,表格等,jus只读视图!),应该显示主要细节(电影标题,摘要)以及相关场景列表的模型。但是场景列表没有显示任何内容,所以将链接Id标题ID传递给列表的问题是什么?

这是我的代码:

型号:

 Movie.cs

public partial class Movie
{
    public Movie()
    {
        Scenes = new HashSet<Scene>();
    }

    [Key]
    public int TitleId { get; set; }
    [Required]
    public string Title { get; set; }
    [DisplayName("Year")]
    public int? TitleYear { get; set; }
    public string Summary { get; set; }       

    public ICollection<Scene> Scenes { get; set; }

}

 Scene.cs

public partial class Scene
{
    [Key]
    public int SceneId { get; set; }
    [ForeignKey("TitleId")]
    public int? TitleId { get; set; } // foreign key from Movie
    public string LocationSite { get; set; }       
    public int? SceneOrder { get; set; }     

    public Movie Title { get; set; }
}

查看(Details.cshtml)

@model MaltaMoviesMVCcore.Models.Movie

<h2>@Model.TitleAndYear()</h2>
<img src="@($"/images/titles/{@Model.TitleId}.jpg")" alt="@Model.Title" />

<br /><br />
@Html.DisplayFor(model => model.Summary)

<br /><br />

  <table class="table">
      <thead>
          <tr>
              <th>
                  Scene Id
              </th>
              <th>
                  Scene Order
              </th>
              <th>
                  Location 
              </th>
              <th></th>                
          </tr>
      </thead>
      <tbody>
          @foreach (var item in Model.Scenes)
    {
      <tr>
          <td>
              @Html.DisplayFor(modelItem => item.SceneId)
          </td>
          <td>
              @Html.DisplayFor(modelItem => item.SceneOrder)
          </td>
          <td>
              @Html.DisplayFor(modelItem => item.LocationSite)
          </td>
      </tr>
}
      </tbody>
  </table>
<a asp-action="Index">Back to Movie List</a>

MovieController:

public async Task<IActionResult> Details(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var movie = await _context.Movies
            .SingleOrDefaultAsync(m => m.TitleId == id);
        if (movie == null)
        {
            return NotFound();
        }

        return View(movie);
    }

通过操作链接从上一个电影列表页面传递初始ID。

没有错误,只显示没有场景列表。我错过了控制器或foreach循环等的东西吗?

我是否可以使用ViewModel或部分查看方法,我尝试过但两种帐户都失败了。

非常感谢

1 个答案:

答案 0 :(得分:0)

修改您的查询以获取电影,如下所示。

 var movie = await _context.Set<Movie>().Include(x => x.Scenes);