Выводим статьи из бд
Привет, ребят! Продолжаем писать наш блог, сегодня мы выведем статьи из бд на экран.
Контроллер 1 часть
В этот раз мы будем работать с контроллером. Для начала нужно создать экземпляр нашего контекста
private readonly ILogger<HomeController> _logger; private ArticleContext adb; public HomeController(ILogger<HomeController> logger, ArticleContext context) { _logger = logger; adb = context; }
Теперь напишем код, благодаря которому в базу данных сразу добавится 4 поста
public HomeController(ILogger<HomeController> logger, ArticleContext context) { _logger = logger; adb = context; if (adb.articles.Count() == 0) { Article article1 = new Article { Text = "бла бла бла бла бла бла бла бла", Title = "Заголовок 1", Time = "16.06.2020" }; Article article2 = new Article { Text = "бла бла бла бла бла бла бла бла", Title = "Заголовок 2", Time = "16.06.2020" }; Article article3 = new Article { Text = "бла бла бла бла бла бла бла бла", Title = "Заголовок 3", Time = "16.06.2020" }; Article article4 = new Article { Text = "бла бла бла бла бла бла бла бла", Title = "Заголовок 4", Time = "16.06.2020" }; adb.articles.AddRange(article1, article2, article3, article4); adb.SaveChanges(); } }
Здесь мы проверяем, если кол-во элементов в базе данных равно 0, то мы добавляем в нее 4 экземпляра класса модели Article. Звучит запутанно, но это просто. Дальше мы добавляем в таблицу все наши статьи и сохраняем изменения.
ViewModel
Давайте перейдем к выводу статей. Первый шаг это создать ViewModel, благодаря которой мы будем выводить данные в представления. Просто нужно в корневой папке создать папку ViewModels и файл ArticleViewModel
Там нужно прописать 2 поля:
- getAllArticles - сюда будем передавать списки из наших постов
- article - поле благодаря которому мы будем обращаться к полям модели
public class ArticleViewModel { public IEnumerable<Article> getAllArticles { get; set; } public Article article { get; set; } }
Контроллер 2 часть
Вернемся к контроллеру, тут нам нужно воспользоваться функцией Index
public IActionResult Index() { IQueryable<Article> source = adb.articles.OrderBy(p => p.Id); var articles = source.ToList(); ArticleViewModel articleViewModel = new ArticleViewModel { getAllArticles = articles }; return View(articleViewModel); }
Сначала мы создаем IQueryable список, в который передаем все посты сортируя их по Id.
А в переменную articles передаем тот же список, передавая его в список( тавтология, но это так ).
Затем создаем экземпляр ViewModel и в поле getAllArticles передаем articles.
View
//Перед работой с View нужно установить еще один NuGet-пакет, а именно bootstrap
Переходим в представление Index в папке Home, удаляем его содержимое и пишем следующую разметку:
@model Lessontg.ViewModels.ArticleViewModel <div class="row pr-4 pl-4"> @{ foreach (var article in Model.getAllArticles) { <div class="col-lg-4 "> <a style="text-decoration: none;" asp-route-id="@article.Id" class="text-dark"><h3 class="pb-1">@article.Title</h3></a> <p style="max-height: 200px; overflow: hidden; text-overflow: ellipsis; font-family: Comfortaa;">@article.Text</p> <h5 class="pt-3">@article.Time</h5> </div> } } </div>
Нашей моделью будет ViewModel и все данные мы будем использовать из нее. При помощи @{} мы можем использовать C#-скрипты.
P.s. здесь установлено ограничение на максимальное число символов, которое может выводить в блоке текст. Так же пока что не обращайте внимания на asp-route-id, это понадобится нам в следующем уроке.
Вуаля, наш код работает
На сегодня все,
Удачи программисты!