Commit 26b5aa62 authored by TTrueBenji's avatar TTrueBenji

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	PhoneStore/Migrations/20220704164942_Init.Designer.cs
#	PhoneStore/Migrations/20220704164942_Init.cs
#	PhoneStore/Migrations/20220704165134_UserEntity.Designer.cs
#	PhoneStore/Migrations/MobileContextModelSnapshot.cs
#	PhoneStore/Models/User.cs
#	PhoneStore/appsettings.json
parents 54a44fca d5d4ce2d
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using PhoneStore.Models;
using PhoneStore.ViewModels;
using Order = PhoneStore.Enums.Order;
namespace PhoneStore.Controllers
{
public class UsersController : Controller
{
private readonly MobileContext _db;
public UsersController(MobileContext db)
{
_db = db;
}
[HttpGet]
public IActionResult Index(
string filteringCriterionByName,
int page = 1,
Order order = Order.NameAsc)
{
int pageSize = 2;
IQueryable<User> users = _db.Users.AsQueryable();
if (!string.IsNullOrEmpty(filteringCriterionByName))
users = users.Where(u => u.Name.Contains(filteringCriterionByName));
int count = users.Count();
users = _db
.Users
.OrderBy(u => u.Name)
.Skip((page - 1) * pageSize)
.Take(pageSize);
ViewBag.NameSort = order == Order.NameAsc ? Order.NameDesc : Order.NameAsc;
ViewBag.AgeSort = order == Order.AgeAsc ? Order.AgeDesc : Order.AgeAsc;
switch (order)
{
case Order.AgeDesc:
users = users.OrderByDescending(u => u.Age);
break;
case Order.AgeAsc:
users = users.OrderBy(u => u.Age);
break;
case Order.NameDesc:
users = users.OrderByDescending(u => u.Name);
break;
default:
users = users.OrderBy(u => u.Name);
break;
}
UsersViewModel model = new UsersViewModel
{
Filter = filteringCriterionByName,
Users = users.ToArray(),
PageViewModel = new PageViewModel(page, count, pageSize )
};
return View(model);
}
}
}
\ No newline at end of file
namespace PhoneStore.Enums
{
public enum Order
{
NameAsc,
NameDesc,
AgeAsc,
AgeDesc
}
}
\ No newline at end of file
using System;
namespace PhoneStore.ViewModels
{
public class PageViewModel
{
public int Page { get; set; }
public int TotalPages { get; set; }
public bool HasPrevious => Page > 1;
public bool HasNext => Page < TotalPages;
public PageViewModel(int page, int count, int pageSize)
{
Page = page;
TotalPages = (int)Math.Ceiling(count / (double)pageSize);
}
}
}
\ No newline at end of file
using System.Collections.Generic;
using PhoneStore.Models;
namespace PhoneStore.ViewModels
{
public class UsersViewModel
{
public IEnumerable<User> Users { get; set; }
public string Filter { get; set; }
public PageViewModel PageViewModel { get; set; }
}
}
\ No newline at end of file
...@@ -27,6 +27,9 @@ ...@@ -27,6 +27,9 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Brands" asp-action="Create">Добавить бренд</a> <a class="nav-link text-dark" asp-area="" asp-controller="Brands" asp-action="Create">Добавить бренд</a>
</li> </li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Users" asp-action="Index">Пользователи</a>
</li>
</ul> </ul>
</div> </div>
</div> </div>
......
@model UsersViewModel
@{
ViewBag.Title = "Пользователи";
Layout = "_Layout";
}
<h2>Список пользователей</h2>
<div class="row">
<div class="phone_add_form col-md-6">
<form asp-action="Index" asp-controller="Users" method="get">
<div class="form_row">
<label for="name">
Имя:
<input
id="name"
type="text"
name="filteringCriterionByName"
value="@Model.Filter">
</label>
<input type="text" hidden name="page" value="@Model.PageViewModel.Page">
<button class="btn btn-outline-warning">Отправить</button>
</div>
</form>
</div>
</div>
<table style="width: 100%">
<tr>
<th>
<a
asp-action="Index"
asp-controller="Users"
asp-route-order="@ViewBag.NameSort"
asp-route-filteringCriterionByName="@Model.Filter">
Имя
</a>
</th>
<th>
<a
asp-action="Index"
asp-controller="Users"
asp-route-order="@ViewBag.AgeSort"
asp-route-filteringCriterionByName="@Model.Filter">
Возраст
</a>
</th>
</tr>
@foreach (var user in Model.Users)
{
<tr>
<td>@user.Name</td>
<td>@user.Age</td>
</tr>
}
</table>
@if (Model.PageViewModel.HasPrevious)
{
<a asp-action="Index" asp-controller="Users"
asp-route-page="@(Model.PageViewModel.Page - 1)"
asp-route-filteringCriterionByName="@Model.Filter"
class="btn btn-outline-warning">Назад</a>
}
@if (Model.PageViewModel.HasNext)
{
<a asp-action="Index" asp-controller="Users"
asp-route-page="@(Model.PageViewModel.Page + 1)"
asp-route-filteringCriterionByName="@Model.Filter"
class="btn btn-outline-warning">Вперед</a>
}
\ 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