Как проверить: много значений для одного «имени» - PullRequest
0 голосов
/ 21 апреля 2019

Я работаю над созданием школьной библиотеки для проекта.Я новичок в среде ASP.NET MVC.Моя проблема в том, что мне нужно отображать авторов для каждой из книг.Были опубликованы три модели: книги, авторы, создатели.В модели авторов делается ссылка на таблицы Books и Creator.Я остановился в тот момент, когда мне нужно отобразить всех создателей данной книги.Как отобразить название книги с несколькими авторами?Можете ли вы дать мне несколько советов о том, как я могу это сделать?

Autorzy Model

namespace WSzkola5.Models
{
    public class Autorzy
    {
        public int Id { get; set; }
        public Ksiazka Ksiazka { get; set; }

        [Display(Name = "Książka")]
        public int KsiazkaId { get; set; }

        public Tworca Tworca { get; set; }
        public int TworcaId { get; set; }
    }
}

Ksiazka Model

namespace WSzkola5.Models
{
    public class Ksiazka
    {
        public int Id { get; set; }

        [Required(ErrorMessage = "Tytuł jest wymagany.")]
        [Display(Name = "Tytuł:")]
        [MaxLength(255, ErrorMessage = "Tytuł jest zbyt długa nazwa.")]
        public string Tytul { get; set; }

        [Required(ErrorMessage = "UKD jest wymagany.")]
        [Display(Name = "UKD:")]
        [MaxLength(50, ErrorMessage = "UKD jest zbyt długi.")]
        public string UKD { get; set; }

        [Required(ErrorMessage = "Opis jest wymagany.")]
        [Display(Name = "Opis:")]
        public string Opis { get; set; }
    }
}

Tworca Model

namespace WSzkola5.Models
{
    public class Tworca
    {
        public int Id { get; set; }

        [Required(ErrorMessage = "Imię jest wymagane.")]
        [Display(Name = "Imię:")]
        [MaxLength(50, ErrorMessage = "Zbyt długa nazwa.")]
        public string Imie { get; set; }

        [Required(ErrorMessage = "Nazwisko jest wymagane.")]
        [Display(Name = "Nazwisko:")]
        [MaxLength(100, ErrorMessage = "Zbyt długa nazwa.")]
        public string Nazwisko { get; set; }
    }
}

Autorzy Controller - Индекс Действие

public ActionResult Index()
        {
            var autorzy = _context.Autorzys.Include(c => c.Ksiazka).Include(c => c.Tworca).ToList();
            return View(autorzy);
        }

Autorzy View - Индекс

@model IEnumerable<WSzkola5.Models.Autorzy>
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Książki</h2>
@if (!Model.Any())
{
    <p>
        Brak.
    </p>
}
else
{<table class="table table-condensed">
    <thead>
    <th>Książki</th>
    <th>UKD</th>
    <th>Autor</th>
    </thead>
    <tbody>
        @foreach (var autorzy in Model)
        {
            <tr>
                <td>@autorzy.Ksiazka.Tytul</td>
                <td>@autorzy.Ksiazka.UKD</td>
                <td>@autorzy.Tworca.Imie @autorzy.Tworca.Nazwisko </td>
            </tr>
        }
    </tbody>
</table>
}

И ViewModel

namespace WSzkola5.ViewModel
{
    public class AutorzyViewModel
    {
        public IEnumerable<Tworca> Tworcas { get; set; }
        public IEnumerable<Ksiazka> Ksiazkas { get; set; }
        public Autorzy Autorzy { get; set; }
    }
}

1 Ответ

0 голосов
/ 21 апреля 2019

В вашей модели не так просто пройти через книги, как сейчас, цикл:

@foreach (var autorzy in Model)
{
    <tr>
        <td>@autorzy.Ksiazka.Tytul</td>
        <td>@autorzy.Ksiazka.UKD</td>
        <td>@autorzy.Tworca.Imie @autorzy.Tworca.Nazwisko </td>
    </tr>
}

будет повторяться по авторам, и если у книги много авторов, то она будет появляться несколько раз (по одному для каждого автора) в списке.Является ли это вашей целью или нет, я не уверен.В любом случае, для того чтобы перечислить всех авторов книги, вам нужно объединить их следующим образом:

@foreach (var autorzy in Model)
{
    <tr>
        <td>@autorzy.Ksiazka.Tytul</td>
        <td>@autorzy.Ksiazka.UKD</td>
        <td>
            @foreach (var a in Model.Where(au => au.Ksiazka.UKD == autorzy.Ksiazka.UKD) )
            {
                @a.Tworca.Imie @a.Tworca.Nazwisko <br/>
            }
        </td>
    </tr>
}

Но лично я бы изменил модель, чтобы в Book был список ее авторов, а затем перебралкниги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...