2016-09-18 31 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);