feat: renommer le dossier Administration en Administrations pour une meilleure cohérence

This commit is contained in:
mirage
2026-03-06 10:33:16 +01:00
parent c8ee7653c3
commit 154632f973
17 changed files with 18 additions and 21 deletions

View File

@@ -1,132 +0,0 @@
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Webzine.Entity;
using Webzine.Entity.Fixtures;
using Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire;
namespace Webzine.WebApplication.Areas.Administration.Controllers
{
[Area("Administration")]
public class CommentaireController : Controller
{
private readonly ILogger<CommentaireController> _logger;
private readonly List<Commentaire> _commentaires;
/// <summary>
/// Initialise une nouvelle instance du <see cref="CommentaireController"/>.
/// Les données sont générées dynamiquement via <see cref="DataFactory"/>.
/// </summary>
/// <param name="logger">Service de journalisation injecté.</param>
public CommentaireController(ILogger<CommentaireController> logger)
{
_logger = logger;
_logger.LogInformation("Initialisation du contrôleur CommentaireController.");
var factory = new DataFactory();
var _artistes = factory.GenerateArtists(10);
var _styles = factory.GenerateStyles(10);
var _titres = factory.GenerateTitres(30, _artistes, _styles);
_commentaires = factory.GenerateCommentaires(50, _titres);
_logger.LogInformation("Données fictives générées avec succès.");
}
/// <summary>
/// Affiche la liste des commentaires dans la vue Index.
/// </summary>
/// <returns>>La vue Index avec le ViewModel contenant la liste des commentaires.</returns>
public ActionResult Index()
{
// Création de données "bouchon" (mock) pour tester l'affichage
var listeCommentaires = new List<Commentaire>
{
new Commentaire
{
IdCommentaire = 1, // Correction: Id -> IdCommentaire
Auteur = "Michel", // Correction: Nom -> Auteur
Contenu = "Nulla sed velit nec tellus gravida molestie",
DateCreation = new DateTime(2023, 1, 22, 15, 59, 28),
// Important : On initialise l'objet Titre pour accéder à Titre.Libelle
Titre = new Titre { Libelle = "St Germain - So Flute" },
},
new Commentaire
{
IdCommentaire = 2,
Auteur = "Jeff",
Contenu = "Lorem ipsum dolor sit.",
DateCreation = new DateTime(2023, 1, 22, 14, 27, 8),
Titre = new Titre { Libelle = "Queen - Bohemian Rapsody" },
},
new Commentaire
{
IdCommentaire = 3,
Auteur = "Eva",
Contenu = "Aenean vulputate eleifend tellus.",
DateCreation = new DateTime(2023, 1, 22, 13, 2, 17),
Titre = new Titre { Libelle = "Rammstein - Du hast" },
},
};
// Initialisation du ViewModel
var viewModel = new CommentaireViewModel
{
Commentaires = listeCommentaires
};
return View(viewModel);
}
/// <summary>
/// Affiche la vue de confirmation de suppression d'un commentaire, en récupérant les détails du commentaire à supprimer à partir de l'identifiant fourni.
/// </summary>
/// <param name="id">L'identifiant du commentaire à supprimer.</param>
/// <returns>La vue de confirmation de suppression avec le ViewModel contenant les détails du commentaire à supprimer, ou une réponse NotFound si le commentaire n'existe pas.</returns>
public ActionResult Delete(int id)
{
var commentaire = _commentaires
.FirstOrDefault(c => c.IdCommentaire == id);
if (commentaire == null)
return NotFound();
var vm = new CommentaireDeleteViewModel
{
IdCommentaire = commentaire.IdCommentaire,
Auteur = commentaire.Auteur,
Contenu = commentaire.Contenu,
DateCreation = commentaire.DateCreation,
TitreLibelle = commentaire.Titre?.Libelle
};
return View(vm);
}
/// <summary>
/// Traite la confirmation de suppression d'un commentaire. En cas de succès, redirige vers la liste des commentaires. En cas d'erreur, affiche à nouveau la vue de confirmation avec le message d'erreur.
/// </summary>
/// <param name="id">L'identifiant du commentaire à supprimer.</param>
/// <param name="model">Le ViewModel contenant les détails du commentaire à supprimer, utilisé pour afficher les informations en cas d'erreur.</param>
/// <returns>Redirection vers la liste des commentaires en cas de succès, ou la vue de confirmation avec le message d'erreur en cas d'échec.</returns>
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(int id, CommentaireDeleteViewModel model)
{
try
{
return RedirectToAction();
}
catch (Exception e)
{
// Log de l'erreur
Console.WriteLine(e);
return View(model);
}
}
}
}

View File

@@ -1,199 +0,0 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Webzine.Entity;
using Webzine.Entity.Fixtures;
using Webzine.WebApplication.Areas.Administration.ViewModels.Titre;
namespace Webzine.WebApplication.Areas.Administration.Controllers;
[Area("Administration")]
public class TitreController : Controller
{
private readonly ILogger<TitreController> _logger;
private readonly List<Titre> _titres;
private readonly List<Style> _styles;
private readonly List<Artiste> _artistes;
/// <summary>
/// Initialise une nouvelle instance du <see cref="TitreController"/>.
/// Les données sont générées dynamiquement via <see cref="DataFactory"/>.
/// </summary>
/// <param name="logger">Service de journalisation injecté.</param>
public TitreController(ILogger<TitreController> logger)
{
_logger = logger;
_logger.LogInformation("Initialisation du contrôleur TitreController.");
var factory = new DataFactory();
_artistes = factory.GenerateArtists(10);
_styles = factory.GenerateStyles(10);
_titres = factory.GenerateTitres(30, _artistes, _styles);
factory.GenerateCommentaires(50, _titres);
_logger.LogInformation("Données fictives générées avec succès.");
}
/// <summary>
/// Affiche la liste des titres dans la vue Index.
/// </summary>
/// <returns>La vue Index avec le ViewModel contenant la liste des titres.</returns>
public ActionResult Index()
{
var model = _titres.Select(t => new AdminTitreList
{
Id = t.IdTitre,
Artiste = t.Artiste?.Nom,
Titre = t.Libelle,
Duree = TimeSpan.FromSeconds(t.Duree).ToString(@"mm\:ss"),
DateSortie = t.DateSortie,
NbLectures = t.NbLectures,
NbLikes = t.NbLikes,
NbCommentaires = t.Commentaires?.Count ?? 0
}).ToList();
return View(model);
}
/// <summary>
/// Affiche le formulaire de création d'un nouveau titre dans la vue Create.
/// </summary>
/// <returns>La vue Create avec le ViewModel contenant les listes déroulantes pour les artistes et les styles.</returns>
public ActionResult Create()
{
var model = new AdminTitreForm
{
Artistes = _artistes.Select(a => new SelectListItem
{
Value = a.IdArtiste.ToString(),
Text = a.Nom
}).ToList(),
AllStyles = _styles.Select(s => new SelectListItem
{
Value = s.IdStyle.ToString(),
Text = s.Libelle
}).ToList()
};
return View(model);
}
/// <summary>
/// Traite la soumission du formulaire de création d'un nouveau titre. Actuellement, cette méthode est un stub qui redirige vers l'index sans effectuer de logique de création réelle.
/// </summary>
/// <param name="collection">Le formulaire soumis contenant les données du nouveau titre. Actuellement, ce paramètre n'est pas utilisé.</param>
/// <returns>Redirige vers l'action Index après la soumission du formulaire. En cas d'erreur, retourne la vue Create pour permettre à l'utilisateur de corriger les données.</returns>
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(IFormCollection collection)
{
try
{
return RedirectToAction(nameof(Index));
}
catch
{
return View();
}
}
/// <summary>
/// Affiche le formulaire de modification d'un titre existant dans la vue Edit, en préremplissant les champs avec les données du titre sélectionné. Les listes déroulantes pour les artistes et les styles sont également remplies pour permettre à l'utilisateur de modifier ces associations.
/// </summary>
/// <param name="id">L'identifiant du titre à modifier, utilisé pour récupérer les données du titre à partir de la liste des titres générés.</param>
/// <returns>La vue Edit avec le ViewModel contenant les données du titre à modifier, ainsi que les listes déroulantes pour les artistes et les styles. En cas d'erreur, retourne une réponse NotFound si le titre n'existe pas.</returns>
public ActionResult Edit(int id)
{
var titre = _titres.First(t => t.IdTitre == id);
var model = new AdminTitreForm
{
Id = titre.IdTitre,
IdArtiste = titre.IdArtiste,
Libelle = titre.Libelle,
Album = titre.Album,
Chronique = titre.Chronique,
DateSortie = titre.DateSortie,
Duree = titre.Duree,
UrlJaquette = titre.UrlJaquette,
UrlEcoute = titre.UrlEcoute,
NbLectures = titre.NbLectures,
NbLikes = titre.NbLikes,
Styles = titre.Styles.Select(s => s.IdStyle).ToList(),
Artistes = _artistes.Select(a => new SelectListItem
{
Value = a.IdArtiste.ToString(),
Text = a.Nom
}).ToList(),
AllStyles = _styles.Select(s => new SelectListItem
{
Value = s.IdStyle.ToString(),
Text = s.Libelle
}).ToList()
};
return View(model);
}
/// <summary>
/// Traite la soumission du formulaire de modification d'un titre existant. Actuellement, cette méthode est un stub qui redirige vers l'index sans effectuer de logique de modification réelle.
/// </summary>
/// <param name="id">L'identifiant du titre à modifier, utilisé pour identifier le titre à mettre à jour. Actuellement, ce paramètre n'est pas utilisé dans la logique de traitement.</param>
/// <param name="collection">Le formulaire soumis contenant les données modifiées du titre. Actuellement, ce paramètre n'est pas utilisé dans la logique de traitement.</param>
/// <returns>Redirige vers l'action Index après la soumission du formulaire. En cas d'erreur, retourne la vue Edit pour permettre à l'utilisateur de corriger les données.</returns>
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(int id, IFormCollection collection)
{
try
{
return RedirectToAction(nameof(Index));
}
catch
{
return View();
}
}
/// <summary>
/// Affiche la vue de confirmation de suppression d'un titre, en récupérant les détails du titre à supprimer à partir de l'identifiant fourni. Le ViewModel contient les informations essentielles du titre, telles que le libellé et le nom de l'artiste, pour permettre à l'utilisateur de confirmer la suppression.
/// </summary>
/// <param name="id">L'identifiant du titre à supprimer, utilisé pour récupérer les données du titre à partir de la liste des titres générés.</param>
/// <returns>La vue de confirmation de suppression avec le ViewModel contenant les détails du titre à supprimer, ou une réponse NotFound si le titre n'existe pas.</returns>
public ActionResult Delete(int id)
{
var titre = _titres.First(t => t.IdTitre == id);
var model = new AdminTitreDelete
{
Id = titre.IdTitre,
Titre = titre.Libelle,
Artiste = titre.Artiste?.Nom
};
return View(model);
}
/// <summary>
/// Traite la confirmation de suppression d'un titre. En cas de succès, redirige vers la liste des titres après avoir supprimé le titre de la liste. En cas d'erreur, affiche à nouveau la vue de confirmation avec le message d'erreur.
/// </summary>
/// <param name="model">Le ViewModel contenant les détails du titre à supprimer, utilisé pour identifier le titre à supprimer et pour afficher les informations en cas d'erreur.</param>
/// <returns>Redirection vers la liste des titres en cas de succès, ou la vue de confirmation avec le message d'erreur en cas d'échec.</returns>
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(AdminTitreDelete model)
{
var titre = _titres.First(t => t.IdTitre == model.Id);
_titres.Remove(titre);
return RedirectToAction(nameof(Index));
}
}

View File

@@ -1,32 +0,0 @@
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire;
/// <summary>
/// ViewModel pour la suppression d'un commentaire, contenant les informations nécessaires pour afficher les détails du commentaire à supprimer.
/// </summary>
public class CommentaireDeleteViewModel
{
/// <summary>
/// Définit l'identifiant du commentaire à supprimer.
/// </summary>
public int IdCommentaire { get; set; }
/// <summary>
/// Définit le nom de l'auteur du commentaire à supprimer.
/// </summary>
public string? Auteur { get; set; }
/// <summary>
/// Définit le contenu du commentaire à supprimer.
/// </summary>
public string? Contenu { get; set; }
/// <summary>
/// Définit la date de création du commentaire à supprimer.
/// </summary>
public DateTime DateCreation { get; set; }
/// <summary>
/// Définit le titre du commentaire à supprimer.
/// </summary>
public string? TitreLibelle { get; set; }
}

View File

@@ -1,17 +0,0 @@
// <copyright file="CommentaireViewModel.cs" company="Webzine">
// Copyright (c) Webzine. All rights reserved.
// </copyright>
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire
{
/// <summary>
/// ViewModel pour afficher la liste des commentaires en administration.
/// </summary>
public class CommentaireViewModel
{
/// <summary>
/// Obtient ou définit la liste des commentaires.
/// </summary>
public IEnumerable<Entity.Commentaire> Commentaires { get; set; } = new List<Entity.Commentaire>();
}
}

View File

@@ -1,22 +0,0 @@
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Titre;
/// <summary>
/// ViewModel pour la suppression d'un titre dans l'administration.
/// </summary>
public class AdminTitreDelete
{
/// <summary>
/// Définit l'identifiant du titre à supprimer.
/// </summary>
public int Id { get; set; }
/// <summary>
/// Définit le titre du titre à supprimer.
/// </summary>
public string Titre { get; set; }
/// <summary>
/// Définit le nom de l'artiste associé au titre à supprimer.
/// </summary>
public string Artiste { get; set; }
}

View File

@@ -1,79 +0,0 @@
using Microsoft.AspNetCore.Mvc.Rendering;
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Titre;
/// <summary>
/// ViewModel pour la création et la modification d'un titre dans l'administration.
/// </summary>
public class AdminTitreForm
{
/// <summary>
/// Définit l'identifiant du titre.
/// </summary>
public int Id { get; set; }
/// <summary>
/// Définit l'identifiant de l'artiste associé au titre.
/// </summary>
public int IdArtiste { get; set; }
/// <summary>
/// Définit le titre du titre.
/// </summary>
public string Libelle { get; set; }
/// <summary>
/// Définit le nom de l'album associé au titre.
/// </summary>
public string Album { get; set; }
/// <summary>
/// Définit la chronique du titre, peut-être une critique ou une description du titre.
/// </summary>
public string Chronique { get; set; }
/// <summary>
/// Définit la date de sortie du titre.
/// </summary>
public DateTime DateSortie { get; set; }
/// <summary>
/// Définit la durée du titre en secondes.
/// </summary>
public int Duree { get; set; }
/// <summary>
/// Définit l'URL de la jaquette de l'album associé au titre.
/// </summary>
public string UrlJaquette { get; set; }
/// <summary>
/// Définit l'URL d'écoute du titre.
/// </summary>
public string UrlEcoute { get; set; }
/// <summary>
/// Définit le nombre de lectures du titre.
/// </summary>
public int NbLectures { get; set; }
/// <summary>
/// Définit le nombre de likes du titre.
/// </summary>
public int NbLikes { get; set; }
/// <summary>
/// Définit la liste des identifiants des styles associés au titre.
/// </summary>
public List<int> Styles { get; set; } = new();
/// <summary>
/// Définit la liste des artistes disponibles pour la sélection dans le formulaire de création ou de modification d'un titre.
/// </summary>
public List<SelectListItem> Artistes { get; set; }
/// <summary>
/// Définit la liste des styles disponibles pour la sélection dans le formulaire de création ou de modification d'un titre.
/// </summary>
public List<SelectListItem> AllStyles { get; set; }
}

View File

@@ -1,48 +0,0 @@
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Titre
{
/// <summary>
/// ViewModel pour la liste des titres dans l'administration, affichant les informations essentielles pour chaque titre.
/// </summary>
public class AdminTitreList
{
/// <summary>
/// Définit l'identifiant du titre.
/// </summary>
public int Id { get; set; }
/// <summary>
/// Définit le nom de l'artiste associé au titre.
/// </summary>
public string Artiste { get; set; }
/// <summary>
/// Définit le titre du titre.
/// </summary>
public string Titre { get; set; }
/// <summary>
/// Définit le nom de l'album associé au titre.
/// </summary>
public string Duree { get; set; }
/// <summary>
/// Définit la date de sortie du titre, affichée dans un format lisible pour les utilisateurs de l'administration.
/// </summary>
public DateTime DateSortie { get; set; }
/// <summary>
/// Définit le nombre de lectures du titre.
/// </summary>
public int NbLectures { get; set; }
/// <summary>
/// Définit le nombre de likes du titre.
/// </summary>
public int NbLikes { get; set; }
/// <summary>
/// Définit le nombre de commentaires associés au titre.
/// </summary>
public int NbCommentaires { get; set; }
}
}

View File

@@ -1,42 +0,0 @@
@model Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire.CommentaireDeleteViewModel
@{
ViewData["Title"] = "Supprimer un commentaire";
}
<div class="container mt-4">
<h1 class="mb-3">Supprimer un commentaire</h1>
<hr />
<p class="mb-4">
Êtes-vous sûr de vouloir supprimer le commentaire suivant ?
</p>
<div class="mb-4">
<h4>@Model.Contenu</h4>
<div class="text-muted">
— <strong>@Model.Auteur</strong>
le @Model.DateCreation.ToString("dd/MM/yyyy HH:mm:ss")
sur <em>@Model.TitreLibelle</em>
</div>
</div>
<form asp-action="Delete" method="post">
<input type="hidden" asp-for="IdCommentaire" />
<button type="submit" class="btn btn-danger">
Supprimer
</button>
</form>
<br/>
<br/>
<a asp-action="Index"
class="btn-link">
Retour à l'administration des commentaires
</a>
</div>

View File

@@ -1,48 +0,0 @@
@model Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire.CommentaireViewModel
@{
ViewData["Title"] = "Commentaires";
}
<div class="justify-content-center m-5">
<h1 class="mb-4">Commentaires</h1>
<div class="table-responsive">
<table class="table table-striped table-hover table-bordered">
<thead class="table-light">
<tr>
<th scope="col">Titre</th>
<th scope="col">Auteur</th>
<th scope="col">Commentaire</th>
<th scope="col">Date de création</th>
<th scope="col" class="text-center">Actions</th>
</tr>
</thead>
<tbody>
@foreach (Webzine.Entity.Commentaire commentaire in Model.Commentaires)
{
<tr class="align-middle">
<td>
@commentaire.Titre.Libelle
</td>
<td>
@commentaire.Auteur
</td>
<td>
@commentaire.Contenu
</td>
<td>
@commentaire.DateCreation.ToString("dd/MM/yyyy HH:mm:ss")
</td>
<td class="text-center">
<a asp-action="Delete" asp-route-id="@commentaire.IdCommentaire" class="d-inline btn btn-link text-primary">
<i class="fas fa-trash"></i>
</a>
</td>
</tr>
}
</tbody>
</table>
</div>
</div>

View File

@@ -1,11 +0,0 @@
@model Webzine.WebApplication.Areas.Administration.ViewModels.Titre.AdminTitreForm
<h1>Créer un titre</h1>
<hr />
<form asp-action="Create" method="post">
<partial name="_Form"/>
</form>

View File

@@ -1,34 +0,0 @@
@model Webzine.WebApplication.Areas.Administration.ViewModels.Titre.AdminTitreDelete
<div class="container mt-4">
<h1 class="mb-3">Supprimer un titre</h1>
<hr />
<p>
Etes-vous sûr de vouloir supprimer le titre
"@Model.Titre"
de
@Model.Artiste ?
</p>
<form asp-action="Delete" method="post">
<input type="hidden" asp-for="Id"/>
<button type="submit" class="btn btn-danger">
Supprimer
</button>
</form>
<br/>
<br/>
<a asp-action="Index">
Retour à l'administration des titres
</a>
</div>

View File

@@ -1,13 +0,0 @@
@model Webzine.WebApplication.Areas.Administration.ViewModels.Titre.AdminTitreForm
<h1>Editer un titre</h1>
<hr />
<form asp-action="Edit" method="post">
<input type="hidden" asp-for="Id"/>
<partial name="_Form"/>
</form>

View File

@@ -1,61 +0,0 @@
@model IEnumerable<Webzine.WebApplication.Areas.Administration.ViewModels.Titre.AdminTitreList>
@{
ViewData["Title"] = "Titres";
}
<div class="container mt-4">
<h1 class="mb-3">Titres</h1>
<hr />
<a asp-action="" class="btn btn-primary mb-3">
<i class="fa fa-plus"></i> Ajouter un nouvel titre
</a>
<table class="table table-striped table-bordered align-middle">
<thead class="table-light">
<tr>
<th>Artiste</th>
<th>Titre</th>
<th>Durée</th>
<th>Date de sortie</th>
<th class="text-center"><i class="fa fa-eye"></i></th>
<th class="text-center"><i class="fa fa-thumbs-up"></i></th>
<th class="text-center"><i class="fa fa-comments"></i></th>
<th class="text-center action-column">Actions</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Artiste</td>
<td>@item.Titre</td>
<td>@item.Duree</td>
<td>@item.DateSortie.ToString("dd/MM/yyyy")</td>
<td class="text-center">@item.NbLectures</td>
<td class="text-center">@item.NbLikes</td>
<td class="text-center">@item.NbCommentaires</td>
<td class="text-center action-column">
<a asp-action="Edit" asp-route-id="@item.Id"
class="btn btn-sm btn-outline-primary">
<i class="fa fa-pen"></i>
</a>
<a asp-action="Delete" asp-route-id="@item.Id"
class="btn btn-sm btn-outline-danger">
<i class="fa fa-trash"></i>
</a>
</td>
</tr>
}
</tbody>
</table>
</div>

View File

@@ -1,135 +0,0 @@
@model Webzine.WebApplication.Areas.Administration.ViewModels.Titre.AdminTitreForm
<div class="container">
<!-- ARTISTE -->
<div class="row mb-3 align-items-center">
<label class="col-md-3 col-form-label">Nom de l'artiste<span class="text-danger">*</span></label>
<div class="col-md-9">
<select asp-for="IdArtiste"
asp-items="Model.Artistes"
class="form-select"></select>
</div>
</div>
<!-- TITRE -->
<div class="row mb-3 align-items-center">
<label class="col-md-3 col-form-label">Titre<span class="text-danger">*</span></label>
<div class="col-md-9">
<input asp-for="Libelle" class="form-control"/>
</div>
</div>
<!-- ALBUM -->
<div class="row mb-3 align-items-center">
<label class="col-md-3 col-form-label">Album<span class="text-danger">*</span></label>
<div class="col-md-9">
<input asp-for="Album" class="form-control"/>
</div>
</div>
<!-- CHRONIQUE -->
<div class="row mb-3">
<label class="col-md-3 col-form-label">Chronique<span class="text-danger">*</span></label>
<div class="col-md-9">
<textarea asp-for="Chronique"
class="form-control"
rows="5"></textarea>
</div>
</div>
<!-- DATE + DUREE -->
<div class="row mb-3 align-items-center">
<label class="col-md-3 col-form-label">Date de sortie<span class="text-danger">*</span></label>
<div class="col-md-3">
<input type="text"
class="form-control"
name="DateSortie"
pattern="\d{2}/\d{2}/\d{4}"
value="@Model.DateSortie.ToString("d")"/>
</div>
<label class="col-md-3 col-form-label">Durée en secondes<span class="text-danger">*</span></label>
<div class="col-md-3">
<div class="input-group">
<input asp-for="Duree"
class="form-control"
type="number"
min="0" />
<span class="input-group-text text-muted">seconds</span>
</div>
</div>
</div>
<!-- JAQUETTE -->
<div class="row mb-3 align-items-center">
<label class="col-md-3 col-form-label">Jaquette<span class="text-danger">*</span></label>
<div class="col-md-9">
<input asp-for="UrlJaquette"
class="form-control"/>
</div>
</div>
<!-- URL ECOUTE -->
<div class="row mb-3 align-items-center">
<label class="col-md-3 col-form-label">URL d'écoute</label>
<div class="col-md-9">
<input asp-for="UrlEcoute"
class="form-control"/>
</div>
</div>
<!-- STYLES -->
<div class="row mb-4">
<label class="col-md-3 col-form-label">Styles</label>
<div class="col-md-9">
<div class="row">
@foreach (var style in Model.AllStyles)
{
<div class="col-md-4 form-check">
<input class="form-check-input"
type="checkbox"
name="Styles"
value="@style.Value"
@(Model.Styles.Contains(int.Parse(style.Value)) ? "checked" : "") />
<label class="form-check-label">
@style.Text
</label>
</div>
}
</div>
</div>
</div>
<!-- LECTURES / LIKES (AFFICHAGE UNIQUEMENT) -->
<div class="row mb-4 align-items-center">
<label class="col-md-3 col-form-label">Nb de lectures<span class="text-danger">*</span></label>
<div class="col-md-3">
@Model.NbLectures
</div>
</div>
<div class="row mb-4 align-items-center">
<label class="col-md-3 col-form-label">Nb de likes<span class="text-danger">*</span></label>
<div class="col-md-3">
@Model.NbLikes
</div>
</div>
<!-- BOUTONS -->
<div class="row mt-4">
<div class="col-md-9 offset-md-3">
<button type="submit" class="btn btn-primary me-2">
Sauvegarder
</button>
</div>
</div>
<br />
<br />
<a asp-action="Index"
class="btn text-primary">
Retour à l'administration des titres
</a>
</div>

View File

@@ -1,2 +0,0 @@
@* Permet de factoriser les imports de tag helpers *@
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

View File

@@ -1,3 +0,0 @@
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}