ASP.Net Utilisation d'une liste dans un modèle complexe
Fermé
thibaut212121
Messages postés1Date d'inscriptionmercredi 25 décembre 2019StatutMembreDernière intervention25 décembre 2019
-
Modifié le 26 déc. 2019 à 03:29
Utilisateur anonyme -
26 déc. 2019 à 03:34
Bonjour à tous et Joyeuses fêtes à ceux qui liront ce poste !
Je suis sur un projet depuis plusieurs jours et impossible de trouver la solution à mon problème ... qui reste assez basique je pense ;)
A titre d'info et pour mieux visualiser le projet, voici sont arborescence :
Je dois réaliser un site Web en ASP.NET en utilisant les pages Razor. Ce site doit afficher des playlists contenant des musiques. Afin de ne pas dubliquer mes musiques en base de données, je suis parti sur un modèle "Many To Many" que voici :
using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.Linq;using System.Threading.Tasks;namespace SupPlayer.Models
{publicclassPlaylists{publicint ID {get;set;}[Required][Display(Name ="Name")]publicstring Name {get;set;}[Required][Display(Name ="Gender")]publicstring Gender {get;set;}publicstring Author {get;set;}publicList<Musics>MusicsList {get;set;}}publicclassMusics{publicint ID {get;set;}[Required][Display(Name ="Name")]publicstring Name {get;set;}[Required][Display(Name ="Path")]publicstring Path {get;set;}}}
A partir de ce modèle Visual Studio me génère donc 2 tables dans une même DB ce qui est top :
Dans ma vue Razor j'arrive parfaitement à afficher toutes les playlists liée à un utilisateur avec une boucle [CODE]Foreach() {}[/CODE]. Le problème arrive quand je veux afficher une playlist plus en détail. J'aimerais pouvoir afficher toutes les musiques qui appartiennent à une Playlist. Pour cela voici ma vue Razor affichant le détail d'une musique :
Quand j'affiche la page détail d'une Playlist, un jolie message m'annonce que mon objet "MusicsList" n'est pas itérable ... j'en déduit que je dois mal le remplir ... ou mal l'initialiser. C'est là que je vois flou et que je n'arrive pas à comprendre mon erreur :
Je ne pense pas que le problème vienne d'ici, mais à titre d'information voici comment je créer mes objets "Playlists" et "Musics" dans le controlleur "Create" :
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNetCore.Mvc;using Microsoft.AspNetCore.Mvc.RazorPages;using Microsoft.AspNetCore.Mvc.Rendering;using SupPlayer.Data;using SupPlayer.Models;using Microsoft.AspNetCore.Identity;namespace SupPlayer
{publicclassCreateModel: PageModel
{privatereadonly SupPlayer.Data.SupPlayerContext _context;publicCreateModel(SupPlayer.Data.SupPlayerContextcontext){
_context = context;}publicIActionResultOnGet(){returnPage();}[BindProperty]publicPlaylistsPlaylists {get;set;}// To protect from overposting attacks, please enable the specific properties you want to bind to, for// more details see https://aka.ms/RazorPagesCRUD.publicasyncTask<IActionResult>OnPostAsync(){if(!ModelState.IsValid){returnPage();}Playlistsplaylist =new Playlists { Name = Playlists.Name, Gender = Playlists.Gender, Author = User.Identity.Name, MusicsList =new List<Musics>{new Musics { Name ="test", Path ="testtest@test"}}};/* Ne pas tenir compte de cette ligne en commentaire ;) * Playlists playlist = new Playlists { Name = Playlists.Name, Gender = Playlists.Gender, Author = User.Identity.Name };*/
_context.Playlists.Add(playlist);
await _context.SaveChangesAsync();returnRedirectToPage("./Index");}}}
Merci par avance de votre aide, qui me serait très utile ... j'ai fait de très nombreuses recherche avant de demander de l'aide sur un forum en vain ... :/
Bien cordialement,
A voir également:
ASP.Net Utilisation d'une liste dans un modèle complexe
Bonjour
Je ne fais pas d’ASP, donc je ne saurais te dire exactement ce qui ne va pas.
Mais ton message d’erreur ne dit pas que ta playlist n’est pas iterable, il dit qu’un objet de la ligne qui plante est null.
A priori, soit Model, soit Model.PlayLists, soit Model.Playlists.Musiclist.