Vous êtes sur la page 1sur 3

TP n°3 Iset Sousse

TP n°3

ASP.NET Core MVC (.NET 6.0)


Jointures et Filtres

Ouvrir le projet CinemaManager du TP2.

Les classes du domaine ou les entités du modèle (Movie et Producer) doivent être comme
suit :

Partie I (Jointure)

A. Jointure par Propriétés de navigation

Les propriétés encadrées et liées par une flèche n’ont aucune colonne correspondante au
niveau des tables de la BD. C’est pour cela qu’elles sont « virtual ».
Elles s’appellent « Propriétés de Navigation » représentant des pointeurs vers les entités
reliées par une association. Dans notre exemple :
 L’entité “Movie” a la propriété “Producer” permettant de naviguer d’un film à
son producteur.
 L’entité “Producer” a la propriété “Movies” permettant de naviguer d’un
producteur à la liste de ses films.

Wissem Eltaief 1
TP n°3 Iset Sousse

1. Développer dans MoviesController, une action MoviesAndTheirProds qui sert à faire


correspondre un film à son producteur (Movie Title, Movie Genre, Producer Name,
Producer Nationality).

a. Sa méthode est identique à Index().

b. Créer la vue correspondante en choisissant le template "List" et la classe du modèle


"Movie".

c. Faire le nécessaire au niveau de cette vue grâce aux propriétés de navigation.

d. Ajouter un lien hypertexte au niveau de la vue Index de Movie afin de passer à la vue
"MoviesAndTheirProds".

2. Faire de même en développant dans ProducersController, une action


ProdsAndTheirMovies qui sert à faire correspondre un producteur à ses films (Producer
Name, Producer Nationality, Movie Title, Movie Genre).

B. Jointure par Modèle (ViewModel)


1. Refaire la question A.1 en suivant les étapes suivantes :

a. Créer dans le dossier « Models » un dossier « ViewModels » et y ajouter une classe


ProdMovie définissant les 4 attributs mTitle, mGenre, pName et pNat.

b. Créer une action MoviesAndTheirProds_UsingModel dans laquelle utiliser une


requête LINQ de sélection avec jointure ayant la syntaxe suivante :
« from x in listObjets1
join y in listObjets2
on joinConstraint
select new [ModelClass] {

} ».

c. Créer une vue vide pour cette action et adapter son contenu afin d’afficher les
données des objets ProdMovie retournées par l’action.

2. Refaire la question A.2 en définissant l'action ProdsAndTheirMovies_UsingModel et en


se servant de la classe ProdMovie.

3. Créer une nouvelle action « MyMovies » ne permettant d’afficher que les films d’un
producteur donné par son ID.

a. Ceci ne nécessite qu’une simple modification dans la requête de la question


précédente.

b. Créer un lien hypertexte devant chaque producteur afin de lister ses films.

Wissem Eltaief 2
TP n°3 Iset Sousse

Partie II (Recherche avancée et Filtres)


Dans cette partie, des requêtes LINQ sont à utiliser au niveau des actions.
Une requête LINQ simple a la syntaxe suivante :

« from x in listObjets
where condition
select x ».

1. Développer dans MoviesController, une action SearchByTitle qui permet de filtrer les
films par titre ou par partie d'un titre.
Sa vue est identique à la vue Index.
a. Considérer le critère de recherche par chaine de requête.
b. Que doit-on faire pour éviter cette solution et passer le critère dans l'URL comme
suit :
http://localhost:port/Movie/SearchByTitle/Critere

2. De même, développer dans MoviesController, une action SearchByGenre qui permet de


filtrer les films par genre ou par partie d'un genre.

3. L'objectif maintenant est de permettre à l'utilisateur de saisir le critère de recherche dans


une zone de texte sur la vue SearchByTitle. Pour cela, ajouter ce formulaire dans cette
vue.

@using (Html.BeginForm()){
<p> Title: @Html.TextBox("Critère") <br />
<input type="submit" value="Texte_A_Afficher_Sur_Le_Bouton" /></p>
}

sachant que :
- l'instruction Html.BeginForm(), dite Html Helper, sert à créer une balise <form>
sur la page Web. De plus, elle permet à ce formulaire de poster pour lui-même
quand on clique sur le bouton.
- Critère : est le nom du paramètre passé à l'action SearchByTitle.
- Texte_A_Afficher_Sur_Le_Bouton : Le texte du bouton.

4. Développer dans MoviesController, une action SearchBy2 qui permet de faire un double
filtrage des films par genre et par titre en utilisant une liste déroulante (DropDownList)
contenant tous les genres existants + "All", une zone de texte pour la saisie du titre ou
d'une partie du titre, et un bouton « Find ».

Ainsi, il faut commencer par récupérer tous les genres afin de peupler la liste déroulante.
Puis, trouver les films qui répondent aux critères choisis (l'un des deux ou les 2 à la fois).

Wissem Eltaief 3

Vous aimerez peut-être aussi