#c_sharp #aspnet #aspnet_mvc
Всем добрый день, кто сталкивался с такой проблемой.
Есть таблица Накладная, у нее есть дочерняя таблица товары в накладной. И есть таблица
товаров.
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
@Html.DisplayNameFor(model => model.InvoiceName)
@foreach (var item in Model) {
@Html.DisplayFor(modelItem => item.InvoiceName)
@foreach (var items in item.ListProdukts)
{
@Html.DisplayFor(modelItem => items.ProduktId)
@Html.DisplayFor(modelItem => items.Produkts.ProduktName)
}
Почему не показывает ProduktName?
Ответы
Ответ 1
Ответ дали на github.
Оказывается ASP.NET Core теперь не добавляет дочерние элементы по умолчанию.
Подробно можно прочесть на английском здесь: docs.asp.net
В моем случае в Controller надо добавить:
в строку:
var applicationDbContext = _context.Invoice.Include(c => c.ListProdukts).ThenInclude(c
=> c.Produkts);
вот это:
.ThenInclude(c => c.Produkts);
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий