2016-09-18 1 views
0

私はInvoiceという名前のテーブルを持っており、託送ノートには子テーブル項目があります。そして商品のテーブルがあります。 MVC 5では結論ページあたりの子レコード

ページ上の次のような構成にすることが可能だった:

@foreach (var item in Model) 
{ 
<tr> 
    <td> 
    @Html.DisplayFor(modelItem => item.Name) 
    </td> 
    <td> 
     @foreach (var items in item.ListProdukts) 
     { 

      @Html.DisplayFor(modelItem => items.Produkts.ProduktName) 
     } 

をしかし、これはASP.NETコアでは動作しません。

モデル:

namespace Proba3.Models 
{ 
    public class Invoice 
{ 
    public int InvoiceId { get; set; } 
    public string InvoiceName { get; set; } 
    public ICollection<ListProdukt> ListProdukts { get; set; } 

} 
} 

namespace Proba3.Models 
{ 
    public class ListProdukt 
    { 
     public int ListProduktId { get; set; } 
     public int ProduktId { get; set; } 
     public virtual Produkt Produkts { get; set; } 

     public int InvoiceId { get; set; } 
     public virtual Invoice Invoices { get; set; } 
    } 
} 

namespace Proba3.Models 
{ 
    public class Produkt 
    { 
     public int ProduktId { get; set; } 
     public string ProduktName { get; set; } 
     public ICollection<ListProdukt> ListProdukts { get; set; } 
    } 
} 

コントローラ:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using Microsoft.AspNetCore.Mvc; 
using Microsoft.AspNetCore.Mvc.Rendering; 
using Microsoft.EntityFrameworkCore; 
using Proba3.Data; 
using Proba3.Models; 

namespace Proba3.Controllers 
{ 
public class InvoicesController : Controller 
{ 


    private readonly ApplicationDbContext _context; 

    public InvoicesController(ApplicationDbContext context) 
    { 
     _context = context;  
    } 

    // GET: Invoices 
    public async Task<IActionResult> Index() 
    { 
     var applicationDbContext = _context.Invoice.Include(c => c.ListProdukts); 

     return View(await applicationDbContext.ToListAsync()); 
    } 

再生回数:

@model IEnumerable<Proba3.Models.Invoice> 

@{ 
    ViewData["Title"] = "Index"; 
} 

<h2>Index</h2> 

<p> 
    <a asp-action="Create">Create New</a> 
</p> 
<table class="table"> 
<thead> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.InvoiceName) 
     </th> 
     <th></th> 
    </tr> 
</thead> 
<tbody> 
@foreach (var item in Model) { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.InvoiceName) 
      </td> 
      <td> 
      @foreach (var items in item.ListProdukts) 
      { 
       <p>@Html.DisplayFor(modelItem => items.ProduktId)</p> 
       <p>@Html.DisplayFor(modelItem => items.Produkts.ProduktName)</p> 
      } 
      </td> 
      <td> 

なぜProduktNameが表示されませんか?

+0

aspコアこれも動作します。 編集: プロダクトのリストを初期化していないようです。コントローラにコードを表示できますか? – Ridikk12

+0

コメントを投稿して回答を更新しないでください。そのかなり読みにくい – Tseng

+0

[NullReferenceExceptionとは何ですか?それを修正するにはどうすればいいですか?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-私が直します) –

答えて

0

回答はgithubで与えられます。

ASP.NET Coreはデフォルトで子要素を追加しないことが判明しました。 詳細はこちらで読むことができます。私の場合はdocs.asp.net

、コントローラに追加する必要がある:行の

var applicationDbContext = _context.Invoice.Include (c => c.ListProdukts) .ThenInclude (c => c.Produkts); 

この:で

.ThenInclude (C => c.Produkts); 
関連する問題