Страницы

Поиск по вопросам

четверг, 21 февраля 2019 г.

Вывод дочерних записей на страницу

Всем добрый день, кто сталкивался с такой проблемой.
Есть таблица Накладная, у нее есть дочерняя таблица товары в накладной. И есть таблица товаров.
MVC 5 Можно было на страницы сделать следующею конструкцию:
@foreach (var item in Model) { @Html.DisplayFor(modelItem => item.Name) @foreach (var items in item.ListProdukts) {
@Html.DisplayFor(modelItem => items.Produkts.ProduktName) }
Но в ASP.Net Core это не работает. При том что студия дает в подсказках кода все эти поля.
Model:
namespace Proba3.Models { public class Invoice { public int InvoiceId { get; set; } public string InvoiceName { get; set; } public ICollection 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 ListProdukts { get; set; } } }
Controllers:
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 Index() { var applicationDbContext = _context.Invoice.Include(c => c.ListProdukts);
return View(await applicationDbContext.ToListAsync()); }
Views:
@model IEnumerable
@{ ViewData["Title"] = "Index"; }

Index


Create New

@foreach (var item in Model) {
@Html.DisplayNameFor(model => model.InvoiceName)
@Html.DisplayFor(modelItem => item.InvoiceName) @foreach (var items in item.ListProdukts) {

@Html.DisplayFor(modelItem => items.ProduktId)

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

}

Почему не показывает ProduktName?


Ответ

Ответ дали на github.
Оказывается ASP.NET Core теперь не добавляет дочерние элементы по умолчанию. Подробно можно прочесть на английском здесь: docs.asp.net
В моем случае в Controller надо добавить:
в строку:
var applicationDbContext = _context.Invoice.Include(c => c.ListProdukts).ThenInclude(c => c.Produkts);
вот это:
.ThenInclude(c => c.Produkts);

Комментариев нет:

Отправить комментарий