diff options
Diffstat (limited to 'Pages')
-rw-r--r-- | Pages/Figure.cshtml | 124 | ||||
-rw-r--r-- | Pages/Index.cshtml | 2 | ||||
-rw-r--r-- | Pages/Shared/_Navigation.cshtml | 2 | ||||
-rw-r--r-- | Pages/Shared/_Products.cshtml | 44 | ||||
-rw-r--r-- | Pages/Shared/_Projects.cshtml | 39 |
5 files changed, 170 insertions, 41 deletions
diff --git a/Pages/Figure.cshtml b/Pages/Figure.cshtml new file mode 100644 index 0000000..76c2216 --- /dev/null +++ b/Pages/Figure.cshtml @@ -0,0 +1,124 @@ +@* @page "{id}" +@model FigureModel; +@using MyDarling.Models; +@using Microsoft.EntityFrameworkCore; +@using Microsoft.AspNetCore.Mvc.RazorPages + +<!DOCTYPE html> +<html> + +<head> + <title>Редактирование фотографии</title> + <link href="/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" /> +</head> + +<body> + <nav class="navbar navbar-dark bg-primary"> + <a class="navbar-brand mx-4" href="/Bundle"><img height="30" src="/assets/img/logo.svg"></a> + <a href="/Account/logout"><button class="btn btn-outline-light mx-4">Выйти</button></a> + </nav> + <div class="container"> + <div class="row row-cols-xl-3 row-cols-md-2 justify-content-center mt-3"> + <div class="col"> + <div class="thumbnail"> + <a href="@Model.FilePath"> + <img src="@Model.FilePath" class="img-thumbnail img-fluid" alt="@Model.Figure?.Description"> + </a> + </div> + <form method="post" class="m-2"> + @Html.AntiForgeryToken() + <div class="form-group"> + <label class="form-label">Описание:</label> + <input name="description" class="form-control" value="@Model.Figure?.Description" /> + </div> + <button type="submit" class="btn btn-outline-success mt-2">Сохранить</button> + </form> + <form asp-page-handler="Delete" method="post"> + <button type="submit" class="btn btn-outline-danger mt-2">Удалить</button> + </form> + </div> + </div> + </div> +</body> + +</html> + +@functions +{ + public class FigureModel : PageModel + { + private DataContext context; + private IWebHostEnvironment environment; + public string? FilePath { get; set; } + public Figure? Figure { get; set; } + public UnderwearBundle? Bundle { get; set; } + public FigureModel(DataContext context, IWebHostEnvironment environment) + { + this.context = context; + this.environment = environment; + } + + public async Task<IActionResult> OnGetAsync(string id) + { + Figure = await context.Figures + .Where(f => f.Id.Equals(id)) + .FirstOrDefaultAsync(); + if (Figure == null) + { + return NotFound(); + } + Bundle = await context.UnderwearBundles + .Where(b => b.Figures.Contains(Figure)) + .FirstOrDefaultAsync(); + if (Bundle == null) + { + return NotFound(); + } + FilePath = $"/Content/{Bundle.Id}/{Figure.Id}.jpg"; + + return Page(); + } + public async Task<IActionResult> OnPostAsync(string id, string description) + { + Figure = await context.Figures + .Where(f => f.Id.Equals(id)) + .FirstOrDefaultAsync(); + if (Figure != null) + { + Figure.Description = description ?? string.Empty; + } + await context.SaveChangesAsync(); + return RedirectToPage(); + } + + public async Task<IActionResult> OnPostDeleteAsync(string id) + { + Figure = await context.Figures.FindAsync(id); + if (Figure == null) + { + return NotFound(); + } + var parentBundle = await context.UnderwearBundles + .Where(b => b.Figures.Contains(Figure)) + .FirstAsync(); + + try + { + string filePath = $"/Content/{parentBundle.Id}/{Figure}.jpg"; + FileInfo figureFile = new FileInfo(environment.WebRootPath + filePath); + if (figureFile.Exists) + { + figureFile.Delete(); + } + + context.Figures.Remove(Figure); + await context.SaveChangesAsync(); + return RedirectToPage($"/Bundle/{Bundle.Id}"); + } + catch (DbUpdateException) + { + return RedirectToPage($"/Bundle/{Bundle.Id}"); + } + } + } +} *@
\ No newline at end of file diff --git a/Pages/Index.cshtml b/Pages/Index.cshtml index a3ec3a5..9a887a6 100644 --- a/Pages/Index.cshtml +++ b/Pages/Index.cshtml @@ -9,5 +9,5 @@ <partial name="_Navigation" /> <partial name="_Masthead" /> <partial name="_About" /> -<partial name="_Projects" /> +<partial name="_Products" /> <partial name="_SignUp" />
\ No newline at end of file diff --git a/Pages/Shared/_Navigation.cshtml b/Pages/Shared/_Navigation.cshtml index 7c29a6b..736fd61 100644 --- a/Pages/Shared/_Navigation.cshtml +++ b/Pages/Shared/_Navigation.cshtml @@ -10,7 +10,7 @@ <div class="collapse navbar-collapse" id="navbarResponsive"> <ul class="navbar-nav ms-auto"> <li class="nav-item"><a class="nav-link" href="#about">О нас</a></li> - <li class="nav-item"><a class="nav-link" href="#projects">Комплекты</a></li> + <li class="nav-item"><a class="nav-link" href="#products">Комплекты</a></li> <li class="nav-item"><a class="nav-link" href="#signup">Заказать</a></li> </ul> </div> diff --git a/Pages/Shared/_Products.cshtml b/Pages/Shared/_Products.cshtml new file mode 100644 index 0000000..a82ac1c --- /dev/null +++ b/Pages/Shared/_Products.cshtml @@ -0,0 +1,44 @@ +@using System.Globalization +@using Microsoft.EntityFrameworkCore +@using MyDarling.Models +@inject DataContext context + +@{ + var products = context.Products + .Include(b => b.Figures) + .Where(b => b.Price != 0 && b.Figures.Count > 0) + .OrderByDescending(b => b.Id); +} + +<section class="projects-section bg-light" id="products"> + <div class="container px-3 px-lg-4 mt-4"> + <div class="row gx-4 gx-lg-5 row-cols-2 row-cols-md-3 row-cols-xl-4 justify-content-center"> + @foreach (var product in products) + { + <div class="col mb-5"> + <div class="card h-100"> + @{ + var figure = product.Figures.First(); + var filePath = $"/Content/{product.Id}/{figure.Id}.jpg"; + } + <a data-src="@filePath" data-fancybox="@product.Id" + data-caption="@figure.Description"><img class="card-img-top" + src="@filePath" alt="@product.Name" /></a> + @for (int i = 1; i < product.Figures.Count(); i++) + { + filePath = $"/Content/{product.Id}/{product.Figures[i].Id}.jpg"; + <a data-src="@filePath" data-fancybox="@product.Id" + data-caption="@product.Figures[i].Description"></a> + } + <div class="card-body p-4"> + <div class="text-center"> + <h5 class="fw-bolder">@product.Name</h5> + @String.Format(new CultureInfo("ru-RU"), "{0:C0}", product.Price) + </div> + </div> + </div> + </div> + } + </div> + </div> +</section>
\ No newline at end of file diff --git a/Pages/Shared/_Projects.cshtml b/Pages/Shared/_Projects.cshtml deleted file mode 100644 index 4b9a62e..0000000 --- a/Pages/Shared/_Projects.cshtml +++ /dev/null @@ -1,39 +0,0 @@ -@using System.Globalization -@using Microsoft.EntityFrameworkCore -@using MyDarling.Models -@inject DataContext context - -@{ - var bundles = context.UnderwearBundles - .Include(b => b.Figures) - .Where(b => b.Price != 0 && b.Figures.Count > 0) - .OrderByDescending(b => b.Id); -} - -<section class="projects-section bg-light" id="projects"> - <div class="container px-3 px-lg-4 mt-4"> - <div class="row gx-4 gx-lg-5 row-cols-2 row-cols-md-3 row-cols-xl-4 justify-content-center"> - @foreach (var bundle in bundles) - { - <div class="col mb-5"> - <div class="card h-100"> - <a data-src="@bundle.Figures[0].FilePath" data-fancybox="@bundle.Id" - data-caption="@bundle.Figures[0].Description"><img class="card-img-top" - src="@bundle.Figures[0].FilePath" alt="@bundle.Name" /></a> - @for (int i = 1; i < @bundle.Figures.Count(); i++) - { - <a data-src="@bundle.Figures[i].FilePath" data-fancybox="@bundle.Id" - data-caption="@bundle.Figures[i].Description"></a> - } - <div class="card-body p-4"> - <div class="text-center"> - <h5 class="fw-bolder">@bundle.Name</h5> - @String.Format(new CultureInfo("ru-RU"), "{0:C0}", @bundle.Price) - </div> - </div> - </div> - </div> - } - </div> - </div> -</section>
\ No newline at end of file |