Добавлена постраничная навигация средствами X.PagedList

Добавлены данные в бд.
Переработан экшен в контроллере FilmsController для обработки постраничной навигации
Стилизованы кнопки постраничной навигации.
parent 9b4d9e76
......@@ -74,6 +74,8 @@
<e p="favicon.ico" t="Include" />
<e p="images" t="Include">
<e p="Posters" t="Include">
<e p="The Lord Of The Rings_The_Lord_of_the_Rings._The_Fellowship_of_the_Ring_—_movie.jpg" t="Include" />
<e p="Иван Васильевич меняет профессию_Иван_Васильевич_меняет_профессию_(постер).jpg" t="Include" />
<e p="Три мушкетера_Три_мушкетёра_(2013).jpg" t="Include" />
</e>
</e>
......
......@@ -13,27 +13,13 @@
<select />
</component>
<component name="ChangeListManager">
<list default="true" id="411e953d-ac1b-431b-8c52-f61006a5f2f2" name="Default Changelist" comment="&#10;Добавлен файл БД(cinema.db)&#10;Удалены лишние файлы не относящиеся к проекту (HomeController) и его представления&#10;Стартовая страница изменена на Films/Index&#10;Добавлено представление для главной страницы Films/Index&#10;В контроллере Films добавлен Экшен Index">
<change afterPath="$PROJECT_DIR$/Controllers/AccountController.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Models/LoginViewModel.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Models/RegisterViewModel.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Views/Account/Index.cshtml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Views/Account/Login.cshtml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Views/Account/Register.cshtml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Views/Films/About.cshtml" afterDir="false" />
<list default="true" id="411e953d-ac1b-431b-8c52-f61006a5f2f2" name="Default Changelist" comment="Добавлена аутентификация пользователя по email/паролю&#10;Добавлены представления аутентификации и выхода из приложения.&#10;Добавлено представление отображения детальной информации по фильму.&#10;Добавлено представление профиля пользователя.&#10;Вынесены линки на регистрацию/вход/ добавление фильма в Layout">
<change beforePath="$PROJECT_DIR$/.idea/.idea.Cinema/.idea/contentModel.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.Cinema/.idea/contentModel.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/.idea.Cinema/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.Cinema/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Cinema.csproj" beforeDir="false" afterPath="$PROJECT_DIR$/Cinema.csproj" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Controllers/FilmsController.cs" beforeDir="false" afterPath="$PROJECT_DIR$/Controllers/FilmsController.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Data/CinemaContext.cs" beforeDir="false" afterPath="$PROJECT_DIR$/Data/CinemaContext.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Models/ErrorViewModel.cs" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Models/Film.cs" beforeDir="false" afterPath="$PROJECT_DIR$/Models/Film.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Models/FilmViewModel.cs" beforeDir="false" afterPath="$PROJECT_DIR$/Models/FilmViewModel.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Startup.cs" beforeDir="false" afterPath="$PROJECT_DIR$/Startup.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Views/Films/Add.cshtml" beforeDir="false" afterPath="$PROJECT_DIR$/Views/Films/Add.cshtml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Views/Films/Index.cshtml" beforeDir="false" afterPath="$PROJECT_DIR$/Views/Films/Index.cshtml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Views/Shared/_Layout.cshtml" beforeDir="false" afterPath="$PROJECT_DIR$/Views/Shared/_Layout.cshtml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/cinema.db" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/cinema.db" beforeDir="false" afterPath="$PROJECT_DIR$/cinema.db" afterDir="false" />
<change beforePath="$PROJECT_DIR$/wwwroot/css/site.css" beforeDir="false" afterPath="$PROJECT_DIR$/wwwroot/css/site.css" afterDir="false" />
</list>
<list id="b32251c1-d844-4e65-bf1c-9f6cfe4d536a" name="Добавлены модели: User для дополнительного описания сущности пользователя, в виде Имени и Фамилии. Film для описания сущности фильма. Определены и добавлены следующие nuget-пакеты : Identity, efCore Design, Proxies, Sqlite Настроена конфигурация используемой БД. Добавлена начальная миграция" comment="" />
......@@ -52,7 +38,17 @@
</component>
<component name="HighlightingSettingsPerFile">
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/SourcesCache/E861A8F7-CA3E-4C3E-8C40-5FD7641920A2/3/IdentityUserContext.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///home/alexey/RiderProjects/Cinema/Views/Shared/_Layout.cshtml" root0="FORCE_HIGHLIGHTING" root1="SKIP_HIGHLIGHTING" />
<setting file="mock:///home/alexey/RiderProjects/Cinema/Data/CinemaContext.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///home/alexey/RiderProjects/Cinema/Migrations/CinemaContextModelSnapshot.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///home/alexey/RiderProjects/Cinema/Views/Films/Index.cshtml" root0="FORCE_HIGHLIGHTING" root1="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/SourcesCache/F9B7D2EE-C4FD-432F-A52C-CB3A9E9DE266/3/IdentityUser.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///home/alexey/RiderProjects/Cinema/Models/Film.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///home/alexey/RiderProjects/Cinema/Controllers/FilmsController.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///home/alexey/RiderProjects/Cinema/Startup.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/47A6E419-BF41-4E8D-983F-ABFDC945D04A/ee/5011ea85/PagerTagHelper.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///home/alexey/RiderProjects/Cinema/Views/Films/Add.cshtml" root0="FORCE_HIGHLIGHTING" root1="SKIP_HIGHLIGHTING" />
<setting file="mock:///home/alexey/RiderProjects/Cinema/Models/FilmViewModel.cs" root0="SKIP_HIGHLIGHTING" />
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
......@@ -70,13 +66,15 @@
<option value="$PROJECT_DIR$/Startup.cs" />
<option value="$PROJECT_DIR$/Views/Shared/_Layout.cshtml" />
<option value="$PROJECT_DIR$/Views/Account/Index.cshtml" />
<option value="$PROJECT_DIR$/wwwroot/css/site.css" />
<option value="$PROJECT_DIR$/Views/Films/Index.cshtml" />
<option value="$PROJECT_DIR$/Models/Film.cs" />
<option value="$PROJECT_DIR$/Controllers/FilmsController.cs" />
<option value="$PROJECT_DIR$/Models/FilmViewModel.cs" />
<option value="$PROJECT_DIR$/Views/Films/Add.cshtml" />
<option value="$PROJECT_DIR$/Views/Films/About.cshtml" />
<option value="$PROJECT_DIR$/Pagination/SitePagedListPagination.cs" />
<option value="$PROJECT_DIR$/Views/_ViewImports.cshtml" />
<option value="$PROJECT_DIR$/Views/Films/Index.cshtml" />
<option value="$PROJECT_DIR$/wwwroot/css/site.css" />
<option value="$PROJECT_DIR$/Controllers/FilmsController.cs" />
</list>
</option>
</component>
......@@ -134,7 +132,7 @@
<option name="presentableId" value="Default" />
<updated>1605771522746</updated>
<workItem from="1605771536927" duration="10080000" />
<workItem from="1605950916335" duration="5649000" />
<workItem from="1605950916335" duration="8111000" />
</task>
<task id="LOCAL-00001" summary="Начало проекта">
<created>1605772561160</created>
......@@ -164,7 +162,14 @@
<option name="project" value="LOCAL" />
<updated>1605778110766</updated>
</task>
<option name="localTasksCounter" value="5" />
<task id="LOCAL-00005" summary="Добавлена аутентификация пользователя по email/паролю&#10;Добавлены представления аутентификации и выхода из приложения.&#10;Добавлено представление отображения детальной информации по фильму.&#10;Добавлено представление профиля пользователя.&#10;Вынесены линки на регистрацию/вход/ добавление фильма в Layout">
<created>1605957184290</created>
<option name="number" value="00005" />
<option name="presentableId" value="LOCAL-00005" />
<option name="project" value="LOCAL" />
<updated>1605957184290</updated>
</task>
<option name="localTasksCounter" value="6" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
......@@ -190,33 +195,34 @@
<MESSAGE value="Добавлены модели: User для дополнительного описания сущности пользователя, в виде Имени и Фамилии.&#10;Film для описания сущности фильма.&#10;Определены и добавлены следующие nuget-пакеты :&#10;Identity, efCore Design, Proxies, Sqlite&#10;Настроена конфигурация используемой БД.&#10;Добавлена начальная миграция" />
<MESSAGE value="Добавлены модели: User для дополнительного описания сущности пользователя, в виде Имени и Фамилии.&#10;Film для описания сущности фильма.&#10;Определены и добавлены следующие nuget-пакеты :&#10;Identity, efCore Design, Proxies, Sqlite.Core&#10;Настроена конфигурация используемой БД.&#10;Добавлена начальная миграция" />
<MESSAGE value="&#10;Добавлен файл БД(cinema.db)&#10;Удалены лишние файлы не относящиеся к проекту (HomeController) и его представления&#10;Стартовая страница изменена на Films/Index&#10;Добавлено представление для главной страницы Films/Index&#10;В контроллере Films добавлен Экшен Index" />
<option name="LAST_COMMIT_MESSAGE" value="&#10;Добавлен файл БД(cinema.db)&#10;Удалены лишние файлы не относящиеся к проекту (HomeController) и его представления&#10;Стартовая страница изменена на Films/Index&#10;Добавлено представление для главной страницы Films/Index&#10;В контроллере Films добавлен Экшен Index" />
<MESSAGE value="Добавлена аутентификация пользователя по email/паролю&#10;Добавлены представления аутентификации и выхода из приложения.&#10;Добавлено представление отображения детальной информации по фильму.&#10;Добавлено представление профиля пользователя.&#10;Вынесены линки на регистрацию/вход/ добавление фильма в Layout" />
<option name="LAST_COMMIT_MESSAGE" value="Добавлена аутентификация пользователя по email/паролю&#10;Добавлены представления аутентификации и выхода из приложения.&#10;Добавлено представление отображения детальной информации по фильму.&#10;Добавлено представление профиля пользователя.&#10;Вынесены линки на регистрацию/вход/ добавление фильма в Layout" />
</component>
<component name="WindowStateProjectService">
<state x="529" y="406" width="852" height="229" key="Git.Rebase.Log.Action.NewCommitMessage.Dialog" timestamp="1605775025446">
<screen x="0" y="0" width="1920" height="1044" />
</state>
<state x="529" y="406" width="852" height="229" key="Git.Rebase.Log.Action.NewCommitMessage.Dialog/0.0.1920.1044/1920.0.1920.1080@0.0.1920.1044" timestamp="1605775025446" />
<state width="1878" height="277" key="GridCell.Tab.0.bottom" timestamp="1605956791150">
<state width="1878" height="277" key="GridCell.Tab.0.bottom" timestamp="1605959198725">
<screen x="0" y="0" width="1920" height="1044" />
</state>
<state width="1878" height="277" key="GridCell.Tab.0.bottom/0.0.1920.1044/1920.0.1920.1080@0.0.1920.1044" timestamp="1605785567204" />
<state width="1878" height="277" key="GridCell.Tab.0.bottom/0.0.1920.1044@0.0.1920.1044" timestamp="1605956791150" />
<state width="1878" height="277" key="GridCell.Tab.0.center" timestamp="1605956791150">
<state width="1878" height="277" key="GridCell.Tab.0.bottom/0.0.1920.1044@0.0.1920.1044" timestamp="1605959198725" />
<state width="1878" height="277" key="GridCell.Tab.0.center" timestamp="1605959198725">
<screen x="0" y="0" width="1920" height="1044" />
</state>
<state width="1878" height="277" key="GridCell.Tab.0.center/0.0.1920.1044/1920.0.1920.1080@0.0.1920.1044" timestamp="1605785567204" />
<state width="1878" height="277" key="GridCell.Tab.0.center/0.0.1920.1044@0.0.1920.1044" timestamp="1605956791150" />
<state width="1878" height="277" key="GridCell.Tab.0.left" timestamp="1605956791149">
<state width="1878" height="277" key="GridCell.Tab.0.center/0.0.1920.1044@0.0.1920.1044" timestamp="1605959198725" />
<state width="1878" height="277" key="GridCell.Tab.0.left" timestamp="1605959198725">
<screen x="0" y="0" width="1920" height="1044" />
</state>
<state width="1878" height="277" key="GridCell.Tab.0.left/0.0.1920.1044/1920.0.1920.1080@0.0.1920.1044" timestamp="1605785567204" />
<state width="1878" height="277" key="GridCell.Tab.0.left/0.0.1920.1044@0.0.1920.1044" timestamp="1605956791149" />
<state width="1878" height="277" key="GridCell.Tab.0.right" timestamp="1605956791150">
<state width="1878" height="277" key="GridCell.Tab.0.left/0.0.1920.1044@0.0.1920.1044" timestamp="1605959198725" />
<state width="1878" height="277" key="GridCell.Tab.0.right" timestamp="1605959198725">
<screen x="0" y="0" width="1920" height="1044" />
</state>
<state width="1878" height="277" key="GridCell.Tab.0.right/0.0.1920.1044/1920.0.1920.1080@0.0.1920.1044" timestamp="1605785567204" />
<state width="1878" height="277" key="GridCell.Tab.0.right/0.0.1920.1044@0.0.1920.1044" timestamp="1605956791150" />
<state width="1878" height="277" key="GridCell.Tab.0.right/0.0.1920.1044@0.0.1920.1044" timestamp="1605959198725" />
<state x="644" y="228" width="622" height="585" key="RiderGenerateDialog" timestamp="1605951142994">
<screen x="0" y="0" width="1920" height="1044" />
</state>
......
......@@ -12,6 +12,7 @@
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="3.1.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.10" />
<PackageReference Include="X.PagedList.Mvc.Core" Version="8.0.7" />
</ItemGroup>
<ItemGroup>
......
......@@ -9,6 +9,7 @@ using Cinema.Services;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Hosting;
using X.PagedList;
namespace Cinema.Controllers
{
......@@ -31,10 +32,15 @@ namespace Cinema.Controllers
_userManager = userManager;
}
public IActionResult Index()
public IActionResult Index(int? page)
{
List<Film> films = _db.Films.OrderBy(f => f.UpdatedAt).ToList();
return View(films);
List<Film> films = _db.Films.OrderByDescending(f => f.UpdatedAt).ToList();
var pageNumber = page ?? 1;
var onePageOfFilms = films.ToPagedList(pageNumber, 21);
ViewBag.FilmPage = onePageOfFilms;
return View();
}
public IActionResult About(int id)
......
@model List<Film>
@using X.PagedList
@using X.PagedList.Mvc.Core
@{
ViewBag.Title = "Главная страница Все фильмы";
Layout = "_Layout";
}
@if (@Model.Count == 0)
@if (@ViewBag.FilmPage.Count == 0)
{
<h3>Список фильмов Пуст</h3>
}
......@@ -14,22 +15,23 @@ else
<h2>Список загруженных фильмов</h2>
<div class="d-flex align-items-stretch flex-wrap justify-content-between">
@foreach (var film in @Model)
@foreach (var film in @ViewBag.FilmPage)
{
<div class="film-card">
<a asp-action="About" asp-route-id="@film.Id">
<div class="film-poster">
<img src="@film.Poster" alt="@film.Name">
</div>
<p class="film-name">
Название - @film.Name
</p>
</a>
<p>Год выпуска - @film.PublishYear</p>
<a asp-action="Index" asp-controller="Account" asp-route-id="@film.UserId">
Добавлен @film.User.Email
</a>
</div>
<a asp-action="About" asp-route-id="@film.Id">
<div class="film-poster">
<img src="@film.Poster" alt="@film.Name">
</div>
<p class="film-name">
Название - @film.Name
</p>
</a>
<p>Год выпуска - @film.PublishYear</p>
<a asp-action="Index" asp-controller="Account" asp-route-id="@film.UserId">
Добавлен @film.User.Email
</a>
</div>
}
</div>
}
\ No newline at end of file
}
@Html.PagedListPager( (IPagedList)ViewBag.FilmPage, page => Url.Action("Index", new { page }) )
No preview for this file type
......@@ -80,3 +80,10 @@ img{
width: 32%;
margin-bottom: 15px;
}
.pagination-container .pagination li{
padding: 5px 12px;
border: 1px solid silver;
border-radius: 5px;
margin: 0 3px;
display: block;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment