Как правильно определить список в моей модели и отобразить количество элементов для каждого списка? - PullRequest
0 голосов
/ 06 мая 2019

В веб-приложении ASP.NET Core 2.2 Razor Pages, использующем Entity Framework, я хотел бы иметь страницу Index, которая отображает заголовки новостных статей в списке с количеством комментариев под ними.При нажатии на заголовки открывается страница сведений, на которой внизу отображаются название, текст статьи и комментарии.Так что сейчас я пытаюсь достичь с помощью Razor Pages очень простой страницы, похожей на Hacker News.Однако я не могу понять, как правильно назначать комментарии к статьям и отображать количество комментариев на странице индекса.

Я создал такую ​​модель:

namespace Teszt01.Models
{
    public class Comment
    {
        public int ID { get; set; }
        public string CommentText { get; set; }
    }
}
namespace Teszt01.Models
{
    public class Article
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public string ArticleText { get; set; }
        public List<Comment> Comments { get; set; }
    }
}

Я решил использовать List <>, но я не уверен, что это нормально, но после просмотра документов Microsoft, переполнения стека и поиска в Google, я не смог найти лучшего способа.После этого я использовал scaffolding и попытался отредактировать страницу Index, чтобы отобразить количество комментариев, без удачи:

@page
@model Teszt01.Pages.Articles.IndexModel

@{
    ViewData["Title"] = "News feed";
}

<table class="table">
    <tbody>
@foreach (var item in Model.Article) {
        <tr>
            <td>
                <a asp-page="./Details" asp-route-id="@item.ID">@Html.DisplayFor(modelItem => item.Title)</a>
                @* trying to display the number of comments: *@
                <p>@item.Comments.Count(modelItem => item.Comments)</p>
            </td>
        </tr>
}
    </tbody>
</table>

Это не работает, ничего не отображается под заголовками статей.В процессе проб и ошибок я попытался изменить строку, которая должна отображать количество комментариев, но это тоже не помогло, и у меня закончились идеи.

Я не трогал контроллер(пока), вот как это выглядит:

namespace Teszt01.Pages.Articles
{
    public class IndexModel : PageModel
    {
        private readonly Teszt01.Models.Teszt01Context _context;

        public IndexModel(Teszt01.Models.Teszt01Context context)
        {
            _context = context;
        }

        public IList<Article> Article { get;set; }

        public async Task OnGetAsync()
        {
            Article = await _context.Article.ToListAsync();
        }
    }
}

Интересно, правильная ли модель, которую я использую, и если да, то как отобразить количество комментариев на странице индекса и правильно ли добавить новыекомментарии к статьям на странице с подробностями.

1 Ответ

0 голосов
/ 06 мая 2019

вам нужно иметь FK в вашем классе что-то ~ это

 public class Article
{
    public int ArticleId { get; set; }
    public string Title { get; set; }
    public string ArticleText { get; set; }
    public List<Comment> Comments { get; set; }
}

public class Comment
{
    public int CommentId { get; set; }
    public string CommentText { get; set; }
    public int ArticleId { get; set; }

}

//Controller 
public async Task<IActionResult> Index()
{
    var ArticalsWithComents = await _context.Article.Include(a => a.Comment);
         return View(ArticalsWithComents.ToListAsync());
}
...