Share via


Vue d'ensemble des modèles de pages et de la génération de modèles automatique Dynamic Data ASP.NET

Mise à jour : novembre 2007

Une tâche récurrente dans le développement de logiciels consiste à afficher et à modifier des données. Dynamic Data ASP.NET vous permet de créer des applications pilotées par des données avec très peu ou pas de code. La génération de modèles automatique est une fonction importante de Dynamic Data qui vous permet de générer ces applications rapidement.

Cette rubrique contient les sections suivantes :

  • Génération de modèles automatique

  • Modèles de pages

Génération de modèles automatique

La génération de modèles automatique est un mécanisme qui s'appuie sur la puissance et les fonctionnalités de l'infrastructure de page ASP.NET existante et l'améliore en affichant dynamiquement des pages selon le modèle de données sans page physique en arrière-plan.

Les avantages de l'utilisation du mécanisme de génération de modèles automatique sont les suivants :

  • peu ou pas de code requis pour créer une application Web pilotée par des données ;

  • courte durée de développement ;

  • les pages sont complètement fonctionnelles et incluent toutes les opérations de base de données (affichage, insertion, modification et suppression), et des fonctionnalités de tri et de pagination ;

  • validation des données intégrée basée sur le schéma de base de données ;

  • des filtres automatiques sont créés pour chaque clé étrangère ou champ booléen.

Dynamic Data utilise le routage d'URL pour faire correspondre et gérer les demandes. Le mécanisme de génération de modèles automatique déduit la vue et la table qu'un utilisateur souhaite obtenir de l'URL demandée. L'utilisation du mécanisme de routage présente l'avantage suivant : l'URL demandée n'a pas à correspondre au chemin d'accès physique dans l'application.

Activation du mécanisme de génération de modèles automatique

Par défaut, le mécanisme de génération de modèles automatique est désactivé. L'activation de ce mécanisme doit être réalisée avec soin parce que celui-ci présente un risque pour la sécurité : il peut exposer le modèle de données entier à des fins d'affichage, de modification, d'insertion et de suppression.

Vous pouvez utiliser les méthodes suivantes pour activer le mécanisme de génération de modèles automatique :

Vous devez inscrire le contexte de données qui utilisera les fonctions de Dynamic Data, même si vous ne comptez pas utiliser le mécanisme de génération de modèles automatique. Cette inscription est effectuée dans le fichier global.asax à l'aide de la méthode RegisterContext. La méthode RegisterContext accepte un objet ContextConfiguration en tant que paramètre. Pour activer le mécanisme de génération de modèles automatique en inscrivant le contexte de données, vous devez affecter à la propriété ScaffoldAllTables de l'objet ContextConfiguration la valeur true. Cela activera le mécanisme de génération de modèles automatique pour le modèle de données entier. En d'autres termes, cela exposera toutes les tables dans le modèle de données à des fins d'affichage, de modification, d'insertion et de suppression. Si vous devez masquer des tables à la vue du mécanisme de génération de modèles automatique, vous pouvez le faire en utilisant l'attribut ScaffoldTableAttribute.

L'exemple suivant indique comment activer le mécanisme de génération de modèles automatique pour toutes les tables dans le modèle de données en inscrivant le contexte de données pour la base de données AdventureWorksLT.

model.RegisterContext(GetType(AdventureWorksLTDataContext), _
                      New ContextConfiguration() With {.ScaffoldAllTables = True})
model.RegisterContext(typeof(AdventureWorksLTDataContext),
    new ContextConfiguration() { ScaffoldAllTables = true });

Si vous souhaitez avoir plus de contrôle sur les tables exposées, vous pouvez utiliser l'attribut ScaffoldTableAttribute pour activer ou désactiver le mécanisme de génération de modèles automatique pour une table donnée. Au lieu d'exposer le modèle de données entier et de masquer les tables qui ne doivent pas être exposées, vous pouvez exposer uniquement celles requises par l'application. Pour appliquer l'attribut ScaffoldTableAttribute, vous devez créer une classe partielle du même nom que la classe d'entité dans le modèle de données puis appliquer l'attribut à la classe partielle.

L'exemple suivant indique comment activer le mécanisme de génération de modèles automatique pour une table individuelle.

Imports System.ComponentModel.DataAnnotations

<ScaffoldTable(True)> _
Partial Public Class Product
End Class
using System.ComponentModel.DataAnnotations;

[ScaffoldTable(true)]
public partial class Product {
}

Si vous souhaitez avoir plus de contrôle sur les champs de données exposés, vous pouvez utiliser l'attribut ScaffoldColumnAttribute pour activer ou désactiver le mécanisme de génération de modèles automatique pour un champ donné.

Par défaut, tous les champs de données ne sont pas affichés par Dynamic Data. Voici quelques règles importantes utilisées par Dynamic Data pour afficher ou non un champ de données :

  • Si un attribut ScaffoldColumnAttribute est appliqué au champ de données, celui-ci est affiché. Cette règle supplante toutes les règles suivantes.

  • Si un attribut UIHintAttribute est appliqué au champ de données, celui-ci est affiché. Cette règle supplante toutes les règles suivantes.

  • Si un champ de données est un champ de clé étrangère, il n'est pas affiché. Cela est dû au fait que Dynamic Data gère les champs de clé étrangère d'une manière différente et n'affiche pas en général la valeur du champ de clé étrangère.

  • Si le champ de données est généré automatiquement dans la base de données, celui-ci n'est pas affiché. En général, ce type de champ ne contient pas d'informations pertinentes. Assurez-vous d'appliquer l'attribut UIHintAttribute au champ de données, si celui-ci doit être affiché.

Si la valeur de la propriété IsCustomProperty est true, le champ de données n'est pas affiché.

Pour appliquer l'attribut ScaffoldColumnAttribute, vous devez créer une classe de métadonnées associée dans laquelle vous appliquerez l'attribut ScaffoldColumnAttribute au champ de données, et vous devez créer une classe partielle du même nom que la classe d'entité dans le modèle de données. Vous devez ensuite associer ces deux classes en appliquant l'attribut MetadataTypeAttribute à la classe partielle.

L'exemple suivant indique comment masquer des champs de données spécifiques, PasswordHash et PasswordSalt, à la vue du mécanisme de génération de modèles automatique.

Imports System.ComponentModel.DataAnnotations

<MetadataType(GetType(Customer_Metadata))> _
Partial Public Class Customer

End Class

Public Class Customer_Metadata
    <ScaffoldColumn(False)> _
    Public PasswordHash As Object

    <ScaffoldColumn(False)> _
    Public PasswordSalt As Object
End Class
using System.ComponentModel.DataAnnotations;

[MetadataType(typeof(Customer_Metadata))]
public partial class Customer
{
}

public class Customer_Metadata
{
    [ScaffoldColumn(false)]
    public object PasswordHash;

    [ScaffoldColumn(false)]
    public object PasswordSalt;
}

Modèles de pages

Le mécanisme de génération de modèles automatique Dynamic Data ASP.NET utilise des modèles pour fournir les affichages par défaut des données. Les modèles sont des pages ASP.NET standard, ce qui signifie que vous pouvez modifier les modèles ainsi que l'apparence et le comportement des pages générées dans toute l'application Web.

Lorsque vous créez une application Dynamic Data ASP.NET, le modèle de projet ajoute un dossier DynamicData à votre projet. Le tableau suivant répertorie les modèles de pages fournis par Dynamic Data dans le dossier DynamicData\PageTemplates :

Nom du modèle de page

Description

Details.aspx

Fournit une vue détaillée d'une ligne unique dans la base de données. Ce modèle utilise un contrôle DetailsView pour afficher les données. C'est le modèle par défaut utilisé pour l'opération de sélection.

Edit.aspx

Fournit une interface pour modifier une ligne unique d'une table de base de données. Ce modèle utilise un contrôle DetailsView pour modifier les données. C'est le modèle par défaut utilisé pour l'opération de modification.

Insert.aspx

Fournit une interface pour insérer une ligne unique dans une table de base de données. Ce modèle utilise un contrôle DetailsView pour insérer les données. C'est le modèle par défaut utilisé pour l'opération d'insertion.

List.aspx

Affiche une liste de lignes d'une table de base de données. Ce modèle fournit des contrôles DropDownList pour filtrer les données de chaque colonne de clé étrangère ou booléenne et des fonctionnalités de tri et de pagination. Il utilise un contrôle GridView pour la liste de lignes. C'est le modèle par défaut utilisé pour l'opération d'affichage.

ListDetails.aspx

Affiche une liste de lignes d'une table de base de données. Ce modèle fournit des contrôles DropDownList pour filtrer les données de chaque colonne de clé étrangère ou booléenne et des fonctionnalités de tri et de pagination. Le modèle utilise un contrôle GridView pour la liste de lignes, et un contrôle DetailsView pour la ligne sélectionnée et l'insertion d'un nouvel enregistrement. C'est un modèle qui présente des fonctionnalités inclusives. Il n'est pas utilisé par défaut, mais vous pouvez modifier la configuration dans le fichier Global.asax pour utiliser ce modèle de préférence.

Tous les modèles par défaut fournis par Dynamic Data ont les caractéristiques suivantes en commun :

  • Ils utilisent une page maître nommée Site.master située dans le dossier racine. La page maître définit des feuilles de style et un en-tête de base, et inclut également un contrôle ScriptManager pour activer les fonctionnalités AJAX sur le site Web. Pour des questions de débogage, il peut être souhaitable de désactiver les mises à jour de pages partielles, en affectant à la propriété EnablePartialRendering du contrôle ScriptManager la valeur false. Pour plus d'informations, consultez Ajout de fonctionnalités AJAX et clientes.

  • Chaque modèle de page contient un contrôle UpdatePanel pour activer le rendu partiel sans publication (postback). Pour plus d'informations, consultez Syntaxe déclarative du contrôle serveur Web UpdatePanel.

  • Chaque modèle de page contient également un contrôle DynamicDataManager pour ajouter un comportement dynamique aux contrôles de source de données et aux contrôles liés aux données présents dans le modèle.

Personnalisation des modèles de pages

Dynamic Data vous permet de personnaliser les modèles fournis. Deux méthodes sont à votre disposition :

  • Personnalisation des modèles de pages intégrés.

  • Personnalisation de la disposition d'une table particulière.

Vous pouvez personnaliser les modèles de pages intégrés en modifiant les pages situées dans le dossier DynamicData\PageTemplates. Les modifications que vous apportez à ce dossier affectent l'apparence et le comportement des pages générées qui utilisent le mécanisme de génération de modèles automatique dans toute l'application Web.

Il est possible d'utiliser le mécanisme de génération de modèles automatique et de créer des pages personnalisées pour des tables spécifiques. Pour ce faire, vous devez créer un dossier sous le dossier DynamicData\CustomPages du même du nom que la table d'entité dans le modèle de données. Dans ce nouveau dossier, vous devez ajouter une page du même nom que le modèle de page utilisé globalement. Par exemple, si vous souhaitez créer une page de détails spécifique pour une table, nommez la page Details.aspx. Vous pouvez utiliser le modèle de page intégré comme point de départ pour votre page personnalisée. Pour un exemple, consultez Comment : personnaliser la disposition d'une table en utilisant un modèle de page personnalisé.

Personnalisation des itinéraires

Comme mentionné précédemment, Dynamic Data utilise le routage ASP.NET pour faire correspondre et gérer les demandes d'URL. Les itinéraires sont définis dans le fichier global.asax. Par défaut, Dynamic Data utilise un modèle de page différent pour chaque opération (affichage, sélection, modification et insertion). Les fonctionnalités de suppression sont affichées dans les pages List et Details, parce que vous n'avez pas besoin d'un modèle de page spécifique pour l'opération de suppression.

Vous pouvez personnaliser les itinéraires pour afficher des URL différentes, mais vous pouvez également les utiliser pour spécifier des modèles de pages différents, supprimer l'extension de fichier de l'URL ou même passer des paramètres à l'aide d'itinéraires au lieu d'utiliser des valeurs de requête. Pour plus d'informations sur les itinéraires, consultez Routage ASP.NET.

L'exemple suivant indique comment spécifier les itinéraires afin d'utiliser un seul modèle de page pour toutes les opérations. Le premier itinéraire active toutes les opérations dans une page pour une table donnée. Le second active une page pour naviguer vers les détails d'un enregistrement, par exemple vers une table de relations lorsque vous avez un champ de clé étrangère.

routes.Add(New DynamicDataRoute("{table}/ListDetails.aspx") With { _
  .Action = PageAction.List, _
  .ViewName = "ListDetails", _
  .Model = model})

routes.Add(New DynamicDataRoute("{table}/ListDetails.aspx") With { _
  .Action = PageAction.Details, _
  .ViewName = "ListDetails", _
  .Model = model})
routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx")
{
    Action = PageAction.List,
    ViewName = "ListDetails",
    Model = model
});

routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx")
{
    Action = PageAction.Details,
    ViewName = "ListDetails",
    Model = model
});

Vous pouvez également créer des itinéraires spécifiques pour des tables spécifiques, en spécifiant un modèle de page différent de celui utilisé par le reste des tables. Les itinéraires sont analysés dans l'ordre dans lequel ils sont définis. Vous devez définir en premier les itinéraires spécifiques puis les itinéraires génériques.

L'exemple suivant indique comment spécifier un modèle de page différent pour la table Products de la base de données AdventureWorks, puis définir un modèle générique pour les autres tables de la base de données.

routes.Add(New DynamicDataRoute("Products/{action}.aspx") With { _
  .ViewName = "ListDetails", _
  .Table = "Products", _
  .Model = model})

routes.Add(New DynamicDataRoute("{table}/{action}.aspx") With { _
  .Constraints = New RouteValueDictionary( _
    New With {.Action = "List|Details|Edit|Insert"}), _
  .Model = model})
routes.Add(new DynamicDataRoute("Products/{action}.aspx")
{
    ViewName = "ListDetails",
    Table = "Products",
    Model = model
});

routes.Add(new DynamicDataRoute("{table}/{action}.aspx")
{
    Constraints = new RouteValueDictionary(
      new { action = "List|Details|Edit|Insert" }),
    Model = model
});

Voir aussi

Concepts

Vue d'ensemble de Dynamic Data ASP.NET

Routage ASP.NET