Utilisation de valeurs de chaîne de requête pour filtrer les données avec la liaison de modèle et les formulaires web

par Tom FitzMacken

Cette série de tutoriels présente les aspects de base de l’utilisation de la liaison de modèle avec un projet ASP.NET Web Forms. La liaison de modèle rend l’interaction des données plus simple que le traitement des objets de source de données (tels que ObjectDataSource ou SqlDataSource). Cette série commence par du matériel d’introduction et passe à des concepts plus avancés dans les didacticiels ultérieurs.

Ce tutoriel montre comment passer une valeur dans la chaîne de requête et utiliser cette valeur pour récupérer des données via la liaison de modèle.

Ce didacticiel s’appuie sur le projet créé dans les parties antérieures de la série.

Vous pouvez télécharger le projet complet en C# ou VB. Le code téléchargeable fonctionne avec Visual Studio 2012 ou Visual Studio 2013. Il utilise le modèle Visual Studio 2012, qui est légèrement différent du modèle Visual Studio 2013 présenté dans ce didacticiel.

Ce que vous allez créer

Dans ce didacticiel, vous allez :

  1. Ajouter une nouvelle page pour afficher les cours inscrits pour un étudiant
  2. Récupérer les cours inscrits pour l’étudiant sélectionné en fonction d’une valeur dans la chaîne de requête
  3. Ajouter un lien hypertexte avec une valeur de chaîne de requête à partir de l’affichage grille vers la nouvelle page

Les étapes de ce tutoriel sont assez similaires à celles que vous avez effectuées dans le tutoriel précédent pour filtrer les étudiants affichés en fonction de la sélection de l’utilisateur dans une liste déroulante. Dans ce tutoriel, vous avez utilisé l’attribut Control dans la méthode select pour spécifier que la valeur du paramètre provient d’un contrôle. Dans ce tutoriel, vous allez utiliser l’attribut QueryString dans la méthode select pour spécifier que la valeur du paramètre provient de la chaîne de requête.

Ajouter une nouvelle page pour afficher les cours d’un étudiant

Ajoutez un nouveau formulaire web qui utilise le site. master master page et nommez la page Cours.

Dans le fichier Courses.aspx , ajoutez une vue grille pour afficher les cours de l’étudiant sélectionné.

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
    <asp:GridView runat="server" ID="coursesGrid"
        ItemType="ContosoUniversityModelBinding.Models.Enrollment"
        SelectMethod="coursesGrid_GetData" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField HeaderText="Title" DataField="Course.Title" />
            <asp:BoundField HeaderText="Credits" DataField="Course.Credits" />
            <asp:BoundField HeaderText="Grade" DataField="Grade" />
        </Columns>
        <EmptyDataTemplate>
            <asp:Label Text="No Enrolled Courses" runat="server" />
        </EmptyDataTemplate>
    </asp:GridView>
</asp:Content>

Définir la méthode select

Dans Courses.aspx.cs, vous allez ajouter la méthode select avec le nom que vous avez spécifié dans la propriété SelectMethod de l’affichage grille. Dans cette méthode, vous allez définir la requête pour récupérer les cours d’un étudiant et spécifier que le paramètre provient d’une valeur de chaîne de requête portant le même nom que le paramètre.

Tout d’abord, vous devez ajouter les instructions using suivantes.

using ContosoUniversityModelBinding.Models;
using System.Web.ModelBinding;
using System.Data.Entity;

Ensuite, ajoutez le code suivant à Courses.aspx.cs :

public IQueryable<Enrollment> coursesGrid_GetData([QueryString] int? studentID)
{
    SchoolContext db = new SchoolContext();
    var query = db.Enrollments.Include(e => e.Course)
        .Where(e => e.StudentID == studentID);
    return query;
}

L’attribut QueryString signifie qu’une valeur de chaîne de requête nommée StudentID est automatiquement affectée au paramètre dans cette méthode.

Dans la vue grille de Students.aspx, vous allez ajouter un champ de lien hypertexte qui renvoie à votre nouvelle page Cours. Le lien hypertexte inclut une valeur de chaîne de requête avec l’ID de l’étudiant.

Dans Students.aspx, ajoutez le champ suivant aux colonnes d’affichage de grille juste en dessous du champ total des crédits.

<asp:TemplateField HeaderText="Total Credits">  
    <ItemTemplate>
        <asp:Label Text="<%# Item.Enrollments.Sum(en => en.Course.Credits) %>" 
            runat="server" />
    </ItemTemplate>
</asp:TemplateField>
<asp:HyperLinkField Text="Courses" DataNavigateUrlFormatString="~/Courses.aspx?StudentID={0}"
    DataNavigateUrlFields="StudentID" />

Exécutez l’application et notez que la vue grille inclut désormais le lien Cours.

Ajouter un lien hypertexte

Lorsque vous cliquez sur l’un des liens, vous voyez les cours inscrits de cet étudiant.

afficher les cours

Conclusion

Dans ce tutoriel, vous avez ajouté un lien avec une valeur de chaîne de requête. Vous avez utilisé cette valeur de chaîne de requête pour la valeur de paramètre dans la méthode select.

Dans le tutoriel suivant, vous allez déplacer le code des fichiers code-behind vers une couche logique métier et une couche d’accès aux données.