June 27, 2020

Отдельная страница статьи

Привет ребят! Сегодня мы реализуем открытие отдельной статьи, поэтому давайте приступать

Controller

Как всегда начнем с контроллера, здесь нужно написать скрипт в HomeController. Он просто выбирает определенный пост из базы данных опираясь на Id.

public async Task<IActionResult> Post(int? id)
        {
            if (id != null)
            {
                Article article = adb.articles.FirstOrDefault(p => p.Id == id);
                if (article != null)
                    return View(article);
            }
            return NotFound();
        }

То есть в функцию передается id, который мы получим благодаря аргументу asp-route-id. Его мы уже прописали в файле Index в заголовке поста( если вы все делали по урокам, у вас это есть )

View

Теперь нам нужно создать новый файл в папке Views -> Home. Его мы назовем Post

@model Lessontg.Models.Article;
@{
    ViewBag.Title = Model.Title;
}

<article class="mb-4">
    <div>
        <h2 class="pt-2" style="color: black; text-align: center;">@Html.DisplayFor(model => model.Title)</h2>
        @foreach (string s in Model.Text.Split('\n'))
        {
            <p class="p-2">@s</p>
        }
    </div>
</article>

Тут стоит заострить внимание на цикле foreach, он используется для того чтобы разделить текс на параграфы и каждый параграф вывести в отдельном <p></p>.

Теперь откроем файл Index.cshtml и допишем два аргумента в строчку ссылки заголовка, она должна выглядеть следующим образом

<a style="text-decoration: none;" asp-controller="Home" asp-action="Post" asp-route-id="@article.Id" class="text-dark"><h3 class="pb-1">@article.Title</h3></a>

И так, мы указали контроллер и функцию которые осуществляют это действие. А аргумент asp-route-id="@article.Id" передает функции именно этот Id

Вуаля, у нас все работает

На сегодня все,
Удачи, программисты!